【发布时间】:2019-09-18 17:48:34
【问题描述】:
我有 2 个表,分别命名为 'genre' 和 'preferred_genre',在 'preferred_genre' 表中有一个外键为 'genre_id' 并且它还有一个 'user_id' 列,我想检索所有类型的但首先那些在 'preferred_genre' 表中有外键关系并且被登录用户首选的流派。
流派 -> id,流派名称
preferred_genre ->id、genre_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
让登录的用户id为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
【问题讨论】:
-
请附上明确的预期输出,并解释您为什么希望它以这种方式出现。
-
@TimBiegeleisen ,我已经更新了输出
-
我发布了一个答案,但记下你已经 $join->where('user_id','=',Auth::id());所以这个查询只会得到首选但登录的用户,但会按用户 5 的首选排序,然后是登录用户的其余部分