Нетерпеливая загрузка на Auth::user() в Laravel 5.2

Я использую текущего аутентифицированного пользователя через объект Auth::user() почти на каждой отдельной странице. В моей таблице users много polls.

Теперь каждый раз, когда я хочу получить соответствующие опросы моего пользователя, Auth::user()->polls Laravel будет выполнять запрос к базе данных.

Есть ли способ или место для ввода объекта Auth::user() Не терпится загрузить соответствующие опросы и другие подобные материалы?


person nipeco    schedule 21.12.2015    source источник


Ответы (1)


функция Auth::user() возвращает один и тот же пользовательский объект каждый раз, когда вы его используете. Он не возвращается к базе данных каждый раз, чтобы снова получить пользователя.

Таким образом, при первом вызове Auth::user()->polls он будет запрашивать базу данных, чтобы получить их опросы. Затем в остальных случаях, когда вы его вызываете, вы извлекаете опросы из объекта (объект хранит данные опросов в своей модели). Так что это может не быть большой проблемой, поскольку для получения опросов требуется только один вызов базы данных, независимо от того, сколько раз вы ее используете.

Чтобы ответить на вопрос, как бы вы это сделали: фасад Auth возвращает объект класса Illuminate\Auth\Guard. Вам нужно будет создать новый класс, который расширяет его, а затем перезаписать метод user(), чтобы получить пользователя с помощью опросов. Вы можете проверить этот класс, чтобы узнать больше о том, как он работает, Тейлор очень хорошо комментирует код и показывает вам, что происходит, чтобы вы могли изменить его при необходимости.

person Jeff    schedule 21.12.2015
comment
Спасибо за Ваш ответ! Это правда, объект расширяется для атрибута polls после его первого вызова. - person nipeco; 22.12.2015