我有一个名为posts的表,另一个名为users。表格帖子有一个字段user_id。
我需要获取最后三个注册用户的最后一篇文章。我试过这样的事情:
Post::with('user')->groupBy('user_id')->orderBy('id','desc')->take(3)->get();
结果接近我的需要,但不完全正确,因为我正在获得最后三位注册用户的第一篇文章。
因此,我需要知道如何用Eloquent制作这样的东西:
SELECT * FROM (SELECT * FROM posts ORDER BY id DESC)sub GROUP BY user_id LIMIT 3;
我不想使用原始查询,因为正如您所看到的,我也需要检索用户对象。
答案 0 :(得分:2)
您可以使用原始查询并检索用户对象
Post::with('user')
->from(DB::raw('(SELECT * FROM posts ORDER BY id DESC)sub'))
->groupBy('user_id')->take(3)->get();