SQL查询可检索所有记录以及使用Laravel通过外键排序的关系

时间:2019-04-30 05:45:21

标签: mysql laravel

我有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

2 个答案:

答案 0 :(得分:0)

$q->orderByRaw("FIELD(preferred_genres.user_id, 5) ASC");

答案 1 :(得分:0)

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