2016-04-13 10 views
1

でレシピや食材を扱うレシピや食材について記事を投稿しましたが、不運にも私の投稿では十分ではなかったので、これでもっと明確にしようとしています。CakePHP 3/MySQL

私は2つのSQLテーブルを持っている:

PRODUCTS (id, code, name) 
RECIPES (product_id, ingredient_id, qty) 

PRODUCT_IDとingredient_idは、テーブルの製品の両方のidのです。 「最終」生成物は、副生成物によって化合物とすることができる。

1つのビューにレシピを作成するために必要なすべてのレシピをツリービューで表示します。

私は例を行います、このために、我々はそのようなデータベースエキス持つことができます。

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) 

:10の製品Aにするために、例えば

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 | 

を、私はこれを表示したいです私は成分(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

私たちにいくつかのコードを表示したほうがいいでしょうか、この質問は下降して閉じてしまうでしょう – RiggsFolly

+0

@RiggsFolly私の投稿を編集しました。 – BlackAlpha

答えて

1

以下のクエリを使用すると、Product Aのすべてのレコードが表示されます。

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

次に、その配列をループしてツリー構造を生成する必要があります。

+0

私のSELECTに「COUNT()」を追加してr.product_id = 'A'にサブレシピがあるかどうかを知ることは可能ですか? – BlackAlpha