Я использую систему аутентификации по умолчанию, которую предоставляет Laravel. Тем не менее, я хочу объединить две таблицы (выполнить два внутренних объединения) в моей таблице аутентификации (пользователи). До сих пор я создал две взаимосвязи между двумя моделями, и это прекрасно работает и дает мне необходимые данные, однако он выполняет два дополнительных запроса, когда я думаю, что в ретроспективе выполнение двух объединений в таблице будет гораздо более эффективным.
Чего я не знаю, как это сделать, так это выполнить объединения в пользовательской модели, чтобы мне не нужно было создавать новый запрос (а использовать тот, который создан путем вызова Auth :: user ()).
Мои таблицы:
Пользователи: id имя пользователя iconid avatarid
Иконки: удостоверение личности
Аватары: изображение
Итак, что я хотел бы сделать, это:
ВЫБЕРИТЕ icons.image как icon_image, avatars.image как avatar_image ОТ пользователей ЛЕВЫЕ НАРУЖНЫЕ СОЕДИНЕНИЯ значки ON icons.id = users.iconid ЛЕВЫЙ ВНЕШНИЙ РЕЙТИНГ
Это возможно? Нужно ли просто переписать метод в моей модели User, чтобы Auth :: user () мог выполнить вышеуказанный запрос?
Спасибо всем, кто отвечает!
Поместите это в вашу модель пользователя:
public function icon()
{
return $this->hasOne('Icon');
}
public function avatar()
{
return $this->hasOne('Avatar');
}
Затем получите пользователя следующим образом:
$user = User::with(['icon', 'avatar'])->find(1);
Затем вы можете получить доступ к значку и аватару следующим образом:
$user->icon
$user->avatar
Для этого с объединениями вы можете сделать это:
$user_id = 1;
DB::table('users')
->join('icons', 'icons.id', '=', 'users.icon_id')
->join('avatars', 'avatars.id', '=', 'users.avatar_id')
->select('users.name', 'icons.path', 'avatars.path')
->where('users.id', $user_id)
->first();
Других решений пока нет …