Я пытаюсь удалить SoftDeletingScope
как глобальную область для конкретной роли пользователя. Так что надо как-то выглядеть следующим образом:Удалить SoftDeletingScope как глобальную область
protected static function boot()
{
parent::boot();
if (Auth::check()) {
// CPOs can see deleted users
if (Auth::user()->hasRole('cpo')) {
static::addGlobalScope('user-cpo-deleted', function(Builder $builder) {
// 1
$builder->withoutGlobalScope(Illuminate\Database\Eloquent\SoftDeletingScope::class);
// 2
$builder->withoutGlobalScopes();
// 3
$builder->withTrashed();
// 4
$builder->where('id', '>=', 1);
});
}
}
}
Я попытался решения 1-3 и, чтобы убедиться, что метод вызывается на всех, 4. Я вошел запросов SQL и увидел, что 4 называлась, но не 3 раньше (точнее, методы не удаляли часть users.deleted_at is null
). Я попробовал их отдельно и все вместе.
Я знаю, что могу сделать что-то вроде этого $users = User::withTrashed()->get();
, который работает, но это будет не совсем безопасно, потому что мне нужно будет найти каждое место, где пользователи могут быть запрошены и обернуть это в инструкции if.
Я знаю, это звучит глупо, но можете ли вы попытаться связать вызовы типа '$ builder-> method() -> method() etc'? – TheFallen
Спасибо за ваш комментарий, но решение @devk сработало;) – Tim