Laravel Join On Auth Table

Я использую систему аутентификации по умолчанию, которую предоставляет Laravel. Тем не менее, я хочу объединить две таблицы (выполнить два внутренних объединения) в моей таблице аутентификации (пользователи). До сих пор я создал две взаимосвязи между двумя моделями, и это прекрасно работает и дает мне необходимые данные, однако он выполняет два дополнительных запроса, когда я думаю, что в ретроспективе выполнение двух объединений в таблице будет гораздо более эффективным.

Чего я не знаю, как это сделать, так это выполнить объединения в пользовательской модели, чтобы мне не нужно было создавать новый запрос (а использовать тот, который создан путем вызова Auth :: user ()).

Мои таблицы:

    Пользователи: id имя пользователя iconid avatarid
    Иконки: удостоверение личности
    Аватары: изображение

Итак, что я хотел бы сделать, это:

    ВЫБЕРИТЕ icons.image как icon_image, avatars.image как avatar_image ОТ пользователей
ЛЕВЫЕ НАРУЖНЫЕ СОЕДИНЕНИЯ значки ON icons.id = users.iconid
ЛЕВЫЙ ВНЕШНИЙ РЕЙТИНГ

Это возможно? Нужно ли просто переписать метод в моей модели User, чтобы Auth :: user () мог выполнить вышеуказанный запрос?

Спасибо всем, кто отвечает!

0

Решение

Поместите это в вашу модель пользователя:

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();
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]