使用CakePHP 3 / MySQL处理食谱和配料

时间:2016-04-13 12:15:02

标签: php mysql cakephp

我发了一篇关于食谱和配料的帖子,但幸运的是我的帖子还不够清楚,所以我试着在这篇文章中更清楚。

我有两个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[]包含产品的所有成分,但如何添加所有子食谱?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用以下查询,您将获得Product A的所有记录。

Select * from RECIPES r inner join  RECIPES r1 on r.ingredient_id = r1.product_id and r.product_id = 'A'

然后你必须循环该数组以产生树结构。