【问题标题】:Sql query to retrieve all records along with relation ordered by foreign key with LaravelSql 查询以使用 Laravel 检索所有记录以及按外键排序的关系
【发布时间】: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 的首选排序,然后是登录用户的其余部分

标签: mysql laravel


【解决方案1】:
$q->orderByRaw("FIELD(preferred_genres.user_id, 5) ASC");

【讨论】:

    【解决方案2】:
     $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();
    

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 2017-11-18
      • 1970-01-01
      • 2018-10-09
      相关资源
      最近更新 更多