Запрос SQL для получения всех записей вместе с отношением, упорядоченным по внешнему ключу с Laravel - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть 2 таблицы, названные как 'genre' и 'предпочитаемый_генр', в таблице 'предпочитаемый_генр' есть внешний ключ как 'genre_id', а также есть столбец 'user_id', я хочу получить все жанры, но сначалатот жанр, который имеет отношение внешнего ключа в таблице 'предпочитаемый_генр' и предпочитается вошедшим в систему пользователем.

жанр -> идентификатор, имя-жанра

предпочитаемый_генр -> идентификатор, идентификатор-жанра,user_id

# genre table #
===============
id | genre_name 
---------------
1  | action    
2  | comedy
3  | horror
4  | drama

# preferred_genre table #
=========================
id | genre_id | user_id 
------------------------
1  |     2    |   5
2  |     4    |   5
3  |     1    |   8
4  |     4    |   8

пусть вошедшим в систему идентификатором пользователя является 5

$q = Genre::select('genres.*');
$q->leftJoin('preferred_genres', function($join)
{
   $join->on('genres.id', '=', 'preferred_genres.genre_id');
   $join->where('user_id','=',Auth::id());
});
$genre_list = $q->orderBy('preferred_genres.created_at', 'desc')->get();

Я хочу получить все жанры, но предпочитаемый жанром user_id 5, сначала, а затем вседругой жанр, как следует

id  | genre_name
----------------
2   | comedy
4   | drama
1   | action
3   | horror

Ответы [ 2 ]

0 голосов
/ 02 мая 2019
 $list=DB::table('genres')
       ->select('genres.*','preferred_genres.*')
       ->join('preferred_genres','genres.id', '=','preferred_genres.genre_id')
       ->where('genres.user_id','=',Auth::user()->id)
       ->orderBy('preferred_genres.created_at', 'DESC')
       ->get();
0 голосов
/ 30 апреля 2019
$q->orderByRaw("FIELD(preferred_genres.user_id, 5) ASC");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...