Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 07.08.2017 15:39:33

User $user with role

Здравствуйте!
Есть метод в Политике

namespace App\Policies;

use Illuminate\Auth\Access\HandlesAuthorization;
use App\User;

class UserPolicy
.....
public function index(User $user) {
        return in_array($user->group()->first()->name, ['Admin', 'Moderator']);
    }

Каждый раз выполняется запрос получения группы. Где в движке laravel необходимо один раз выполнить with('group') ?

Не в сети

#2 07.08.2017 16:12:32

Re: User $user with role

Каждый раз выполняется запрос получения группы. Где в движке laravel необходимо один раз выполнить with('group') ?

Во первых:

        return in_array($user->group->first()->name, ['Admin', 'Moderator']);

(убрать скобки)

Изменено covobo (08.08.2017 14:34:57)

Не в сети

#3 07.08.2017 16:21:43

Re: User $user with role

Не помогло. Теперь вместо запросов

select * from `user_groups` where `user_groups`.`id` = '3' limit 1

они стали

select * from `user_groups` limit 1

Не в сети

#4 07.08.2017 17:36:46

Re: User $user with role

Если ты проверяешь только текущего пользователя, то ты можешь "подгрузить" связь в посреднике, например:

auth()->user()->load('group');

И потом обращаться к загруженным данным из любой части приложения:

auth()->user()->group->first()->name

Изменено AlexeyMezenin (07.08.2017 17:39:16)

Не в сети

#5 08.08.2017 14:25:48

Re: User $user with role

Если ты проверяешь только текущего пользователя, то ты можешь "подгрузить" связь в посреднике, например:

А куда это вставить единоразово, чтобы везде auth()->user() уже была подгружена связь?
Подобная проверка используется во всех политиках на проекте.

Не в сети

#6 08.08.2017 15:10:27

Re: User $user with role

А куда это вставить единоразово, чтобы везде auth()->user() уже была подгружена связь? Подобная проверка используется во всех политиках на проекте.

Я написал выше, что можно это сделать в посреднике (middleware). А посредника подключить к необходимым маршрутам, логично будет подключить к той же группе маршрутов, к которой подключен auth.

Не в сети

Подвал раздела