我发了一篇关于食谱和配料的帖子,但幸运的是我的帖子还不够清楚,所以我试着在这篇文章中更清楚。
我有两个SQL表:
PRODUCTS (id, code, name)
RECIPES (product_id, ingredient_id, qty)
product_id和ingredient_id都是表PRODUCTS的id。 “最终”产品可以通过副产品复合。
我想在树视图中显示在一个视图中制作食谱所需的所有食谱。
我将做一个例子,为此,我们可以拥有这样的数据库提取:
PRODUCTS (id is auto_increment)
code | name |
________|________________|
A | Product A |
A1 | Product A1 |
A2 | Product A2 |
A21 | Product A21 |
A22 | Product A22 |
A3 | Product A3 |
RECIPES
product_id | ingredient_id | qty |
_____________|_______________|_____|
A | A1 | 5 |
A | A2 | 9 |
A | A3 | 11 |
A2 | A21 | 2 |
A2 | A22 | 3 |
例如,要制作10个产品A,我想要显示:
Product A - 10
--> Product A1 - 50 (5*10)
--> Product A2 - 90 (9*10)
------> Product A21 - 180 (2*(9*10))
------> Product A22 - 270 (3*(9*10))
--> Product A3 - 110 (11*10)
我只能显示成分列表(A1,A2,A3),但我无法显示产品A2的所有子配方,如A21和A22。
我在我的控制器中这样做:
$ingredients[] = [$codeProduct=> $this->Recipes->getListOfIngredients($codeProduct)];
getListOfIngredients函数:
public function getListOfIngredients($code = null){
if ($code <> null){
$ingredients = $recipes->find('all', ['conditions' => ['Recipes.product_id = ' => $code]]);
return $ingredients->toArray();
}
}
使用该代码,$ingredients[]
包含产品的所有成分,但如何添加所有子食谱?
感谢您的帮助。
答案 0 :(得分:1)
使用以下查询,您将获得Product A
的所有记录。
Select * from RECIPES r inner join RECIPES r1 on r.ingredient_id = r1.product_id and r.product_id = 'A'
然后你必须循环该数组以产生树结构。