laravel group从表中获取最新记录

我有一个表要由用户检索数据组,但是我想得到最新的条目,该如何使用雄辩的方式做到这一点。

这是我正在使用的雄辩查询。

Product::whereNotNull('user_id')
         ->orderBy('id','desc')
         ->groupBy('user_id')
         ->get();

这是我的桌子

Id   Name   user_id
-------------------------
1    A       1
2    b       1
3    c       2
4    d       2
5    e       3
6    f       3

查询得到的结果是我

Id   Name   user_id
-------------------------
1    A       1
3    c       2
5    e       3

我想要的结果

Id   Name   user_id
-------------------------
2    b       1
4    d       2
6    f       3
newer1106 回答:laravel group从表中获取最新记录

Product::whereRaw('id IN (select MAX(id) FROM products GROUP BY user_id)')
         ->whereNotNull('user_id')
         ->orderBy('id','desc')
         ->get();

您将需要一个嵌套查询,我认为您不能避免它,但是此解决方案应该有效。

GroupBy发生在OrderBy之前,因此您必须先获取最近的记录

,

尝试一下:

$subquery = Product::orderBy('id','DESC');

$products = DB::table(DB::raw("({$subquery->toSql()}) as subquery"))
   ->whereNotNull('user_id')
   ->groupBy('user_id')
   ->get();

第二种方式:在集合中使用unique()方法(unique方法返回集合中的所有唯一模型):

$products = Product::whereNotNull('user_id')
             ->orderBy('id','desc')
             ->get()
             ->unique('user_id');
,

签出Laravel Docs

最新/最旧
latestoldest方法可让您轻松按日期对结果进行排序。默认情况下,结果将按created_at列排序。或者,您可以传递希望排序的列名:

$product = Product::latest()->first();
本文链接:https://www.f2er.com/3152462.html

大家都在问