我有一些类别,每个类别中都有很多职位 我想获取最近4条帖子的所有类别
我雄辩的代码是:
$allcats = Category::whereHas('posts')->with(['posts' => function($q){
$q->take(4);
}])->get();
但是问题是:该查询仅需要4个帖子(所有类别中的4个帖子)
可以雄辩地做到这一点吗? 或者可以使用查询生成器来执行此操作?
答案 0 :(得分:0)
摘自Constraining Eager Loads上的Laravel文档
[!]限制急切的负载时,可能不会使用
limit
和take
查询构建器方法。
因此,您必须像这样在类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();
希望这会有所帮助