2015-12-21 5 views
2

Я использую текущий аутентифицированный пользователь через объект Auth::user() почти на каждой странице. Мой users стол has manypolls.Eager Loading at Auth :: user() в Laravel 5.2

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

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

ответ

2

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

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

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

+0

Спасибо за ваш ответ! Это правда, объект распространяется для атрибута 'polls' после его вызова один раз. – nipeco