【发布时间】:2019-06-22 18:13:00
【问题描述】:
我在 Category 和 Article 模型之间有简单的 Laravel 关系。我需要返回所有类别的列表以及相关文章。
测试数据: 3 个类别和 15 篇文章(每个类别 5 篇文章)。
预期结果:所有类别的集合,每个类别有 2 篇最新相关文章
默认情况下我应该使用类似的东西:
Category::with('articles')->get();
没关系 - 我有 3 个类别。每个类别都有 5 条相关记录的“关系”。
接下来,我尝试了:
Category::with(['articles' => function ($query) {
$query->orderBy('created_at', 'desc');
$query->limit(2);
}])->get();
但这是错误的方式。 “原始”查询中的这种结构如下所示:
select * from `articles` where `articles`.`category_id` in (select id from categories) limit 2
所以它按预期返回了一个错误的结果...
我需要所有类别和每个类别的最新 2 篇文章(3 * 2 = 6 条记录)此查询仅返回 2 条记录
【问题讨论】:
-
这只是我的错字...已编辑
-
然后一目了然,应该可以正常工作。您可以发布实际结果而不是生成的查询吗?它应该是
Category模型的集合,每个模型都有 0 个或多个链接文章。 -
Category::with('articles')应该是 2 个查询,而不是 1 个。 -
请查看“原始”查询。
select * from articles ... limit (2)只返回了 2 条记录而不是 6 -
你最后确实有一个限制 2。
标签: laravel eloquent relationship