Laravel: как «отключить» глобальную область видимости, чтобы включить в запрос «неактивные» объекты?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel: как «отключить» глобальную область видимости, чтобы включить в запрос «неактивные» объекты?

Сообщение Anonymous »


У меня проблемы с глобальными областями, особенно с удалением области.

В моей модели пользователя у меня есть ActivatedUsersTrait, который представляет глобальную область действия для запроса только тех пользователей, у которых в столбце «активировано» установлено значение true (пользователь «активируется» после проверки электронной почты).

Пока все работает нормально, когда я запрашиваю User::all(), я получаю только пользователей с активированным = true.

Моя проблема теперь в том, как включить неактивированных пользователей в мой запрос, как это делает SoftDeletingTrait через withTrashed()? Это актуально только для моего ActivationController, где мне нужно получить пользователя, установить active=true и сохранить его обратно в базу данных.

Я создал метод withInactive() в своем ActiveUsersTrait на основе метода, который я нашел в SoftDeletingTrait, но когда я запускаю запрос к User::withInactive->get(), неактивированные пользователи не будут отображаться в результатах.

Вот мой ActiveUsersTrait: use PB\Scopes\ActiveUsersScope; черта ActiveUsersTrait { публичная статическая функция bootActiveUsersTrait() { static::addGlobalScope (новый ActiveUsersScope); } публичная статическая функция withInactive() { // dd(новая статика); return (новый статический) -> newQueryWithoutScope (новый ActiveUsersScope); } публичная функция getActivatedColumn() { вернуть «активировано»; } публичная функция getQualifiedActivatedColumn() { return $this->getTable().'.'.$this->getActivatedColumn(); } } и мой ActiveUsersScope:

use Illuminate\Database\Eloquent\ScopeInterface; используйте Illuminate\Database\Eloquent\Builder; класс ActiveUsersScope реализует ScopeInterface { публичная функция Apply (Builder $builder) { $модель = $builder->getModel(); $builder->where($model->getQualifiedActivatedColumn(), true); } публичная функция удаления (Builder $builder) { $column = $builder->getModel()->getQualifiedActivatedColumn(); $query = $builder->getQuery(); foreach ((массив) $query->wheres как $key => $where) { если ($this->isActiveUsersConstraint($where, $column)) { unset($query->wheres[$key]); $query->wheres = array_values($query->wheres); } } } защищенная функция isActiveUsersConstraint (массив $where, $column) { return $where['type'] == 'Basic' && $where['column'] == $column; } } Любая помощь приветствуется!

Заранее спасибо! -Джозеф
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»