雄辩地从所有类别中获得4个帖子

时间:2019-10-02 23:58:48

标签: sql laravel eloquent query-builder eloquent--relationship

我有一些类别,每个类别中都有很多职位 我想获取最近4条帖子的所有类别

我雄辩的代码是:

$allcats = Category::whereHas('posts')->with(['posts' => function($q){
            $q->take(4);
}])->get();

但是问题是:该查询仅需要4个帖子(所有类别中的4个帖子)

可以雄辩地做到这一点吗? 或者可以使用查询生成器来执行此操作?

1 个答案:

答案 0 :(得分:0)

摘自Constraining Eager Loads上的Laravel文档

  

[!]限制急切的负载时,可能不会使用limittake查询构建器方法。

因此,您必须像这样在类Category上创建另一个关系方法

public function lastPosts()
{
  return $this->hasMany('App\Post')->take(4);
}

然后使用它

$allcats = Category::whereHas('posts')->with('lastPosts')->get();

或使用原始查询

$allcats = Category::whereHas('posts')->with(['posts' => function($q){
            $q->orderBy('created_at')->selectRaw('max(4)');
}])->get();

希望这会有所帮助

相关问题