Laravel — Чтение данных из файла кеша внутри функции применения GlobalScope

Я пытаюсь прочитать некоторые данные из кэшированного файла, ранее сохраненного после входа пользователя в систему.

Если auth()->attempt($credentials) проходит я храню данные некоторых пользователей в файл кэша.

$user_id = auth()->user()->id;
$user = User::with(['roles.perms','offices.clients','offices.locations.country'])->find($user_id);
cache()->put('user_'.$user_id.'_data',$user,60);

Я хочу использовать этот файл кэша, поэтому мне не нужно повторно запускать некоторые запросы, чтобы связать идентификаторы для этого пользователя и его отношения с другими моделями.

Поэтому я пытаюсь прочитать из этого файла функцию применения GlobalScope, скажем, я хочу отобразить страны, где у пользователя есть офисы.

Я попробовал это:

public function apply(Builder $builder, Model $model){
$user_id = auth()->user()->id;
$user = cache()->get('user_'.$user_id.'_data');
$countries = [];
foreach ($user->offices as $office){
$countries[] = $office->locations[0]->country_id;
}
$builder->whereIn($model->getTable().'.id',$countries);
}

Если кеш пуст, возвращается ошибкаПытаясь получить в собственность «офисы» не объект».

Если я отключу глобальную область, войду в систему, а затем снова поверну область, это сработает. Таким образом, файл кэша создается после входа в систему.

Если я очищаю кеш и пытаюсь войти (с глобальной областью действия), я получаю сообщение об ошибке. Поэтому я не уверен, но я думаю, что каким-то образом добавление глобальной области видимости выполняется перед кэшированием после входа в систему.

Любые идеи, как я могу это исправить или изменить процедуру.

ОБНОВЛЕНО

Похоже, что для создания файла и глобальной области видимости потребовалось некоторое время. Я проверяю, есть ли файл уже, если не создать его. После этой модификации его работа …

Я использовал Модель для создания файла кэша, а не контроллера аутентификации, как раньше.

if($id=auth()->user()->id){
if(!Cache::has('user_'.$id.'_data')){
$user = User::with(['roles.perms','clients','offices.users','offices.employees','offices.clients.clientUsers','offices.locations.country','offices.projects.jobOrders'])->find($id);
Cache::forever('user_'.$id.'_data',$user);
}
if(!auth()->user()->hasRole(['dekra_master_admin'])) {
static::addGlobalScope(new EmployeeScope);
}
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]