我有一个表要由用户检索数据组,但是我想得到最新的条目,该如何使用雄辩的方式做到这一点。
这是我正在使用的雄辩查询。
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
答案 0 :(得分:2)
Product::whereRaw('id IN (select MAX(id) FROM products GROUP BY user_id)')
->whereNotNull('user_id')
->orderBy('id','desc')
->get();
您将需要一个嵌套查询,我认为您不能避免它,但是此解决方案应该有效。
GroupBy
发生在OrderBy
之前,因此您必须先获取最近的记录
答案 1 :(得分:1)
尝试一下:
$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');
答案 2 :(得分:0)
最新/最旧
latest
和oldest
方法可让您轻松按日期对结果进行排序。默认情况下,结果将按created_at
列排序。或者,您可以传递希望排序的列名:
$product = Product::latest()->first();