我有三个表
categories
,brands
,products
,每个表都有列tagkey
我正在尝试检索所有类别,每个类别有 2 个品牌,每个品牌有 5 个产品,在 laravel 中具有特定标签
我写了这个查询
Category::with(['brands' => function($query) use ($tag) {
$query->with(['products' => function($productQuery) use ($tag) {
$productQuery->where('tagkey', $tag->key)->limit(5);
}])->where('tagkey', $tag->key)->limit(2);
}])->where('tagkey', $tag->key)->get();
当您尝试在急切加载模型中添加限制时,它总共只会返回有限的数量。内部 eloquent 运行 2 个查询,第一个查询获取您的类别(从类别中选择 *),它从类别中获取所有 id,然后运行新查询以获取品牌(从品牌中选择 *,其中 (catgories_ids) 中的类别 id 限制为 15)。所以在为了解决这个问题,你可以运行自己的 sql 查询:
select * from (select brands.*,@row_number:=case when @category_id=brands.category_id then @row_number+1 else 1 end row_num,@category_id:=brands.category_id CategoryId from brands join (select @row_number:=0,@category_id:=0)asdasd where brands.category_id in (ids) ) asdas where row_num <=2
.