Laravel дублирует запросы пользователя

#php #mysql #laravel

#php #mysql #ларавель

Вопрос:

Панель отладки считывает

368 statements were executed, 360 of which were duplicated, 8 unique

Оказывается, что при каждой проверке моего пользователя, через auth()-gt;user()-gt;isCustomer() и другие подобные функции, он на самом деле каждый раз ищет пользователя.

т.е.

 public function hasRole($role)  {  // If the user has the 'admin' role, always authorize  if ($this-gt;roles()-gt;where('name', 'customer')-gt;first() !== null) {  return true;  }   return null !== $this-gt;roles()-gt;where('name', $role)-gt;first();  }  // Check for admin  public function isCustomer()  {  return $this-gt;hasRole('customer');  }  

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

Я также использую эту 404labfr/laravel-impersonate функцию в этом проекте (поэтому, когда вы являетесь администратором, вы можете выдавать себя за других пользователей).

Комментарии:

1. охранники кэшируют пользователя, так что это не охранники (аутентификация) … что бы вы isCustomer ни делали, это выполнение запроса … это не поиск пользователя каждый раз, когда вы каждый раз просматриваете его роли … используйте динамическое свойство для отношения, чтобы загрузить его и использовать его вместо выполнения нового запроса для поиска по их ролям

2. как бы я это сделал, пожалуйста, @lagbox

Ответ №1:

Я думаю, что вы можете уменьшить запросы вдвое, используя:

 public function hasRole($role) {  return null !== $this-gt;roles()-gt;whereIn('name', ['customer', $role])-gt;first(); }