尝试从特定表中获取 N 行,而从另一个表中获取 1 行

问题描述 投票:0回答:1

我有三个表

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();

但是这个查询让我得到了所有类别总共 2 个品牌和所有品牌总共 5 个产品。 this is the expected output. 我很感激任何见解或建议。谢谢!

laravel orm
1个回答
0
投票

当您尝试在急切加载模型中添加限制时,它总共只会返回有限的数量。内部 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
.

© www.soinside.com 2019 - 2024. All rights reserved.