雄辩的从所有类别中获得 4 个帖子
Posted
技术标签:
【中文标题】雄辩的从所有类别中获得 4 个帖子【英文标题】:eloquent get 4 posts from all categories 【发布时间】:2020-02-01 06:40:12 【问题描述】:我有一些类别和每个类别中的许多帖子 我想获取最近 4 个帖子的所有类别
我的 eloquent 代码是:
$allcats = Category::whereHas('posts')->with(['posts' => function($q)
$q->take(4);
])->get();
但问题是:这个查询只需要 4 个帖子(所有类别的 4 个帖子)
用雄辩的可以做到这一点吗? 或者我可以用查询生成器来做这个吗??
【问题讨论】:
【参考方案1】:来自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();
希望对你有帮助
【讨论】:
结果相同 更新了我的答案 现在使用你的第二个解决方案我有这个错误:SQLSTATE[42000]: 语法错误或访问冲突:1140 GROUP 列的混合 (MIN(),MAX(),COUNT(),... ) 如果没有 GROUP BY 子句,则没有 GROUP 列是非法的 (SQL: select max(4),以上是关于雄辩的从所有类别中获得 4 个帖子的主要内容,如果未能解决你的问题,请参考以下文章