雄辩的从所有类别中获得 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 文档

[!] 约束急切加载时可能无法使用 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();

希望对你有帮助

【讨论】:

结果相同 更新了我的答案 现在使用你的第二个解决方案我有这个错误:SQLSTATE[42000]: 语法错误或访问冲突:1140 GROUP 列的混合 (MIN(),MAX(),COUNT(),... ) 如果没有 GROUP BY 子句,则没有 GROUP 列是非法的 (SQL: select max(4),

以上是关于雄辩的从所有类别中获得 4 个帖子的主要内容,如果未能解决你的问题,请参考以下文章

如何获得所有亚马逊类别的产品

如何使用父枢轴值作为条件获得雄辩的关系

从帖子 ID 获取类别名称

如何根据“枚举”列获得分类的 laravel 雄辩结果并在一页中显示?

php Laravel雄辩获得最新的相关模型

Wordpress 自定义帖子类型分类 - 获取特定内容