2016-05-11 13 views
0

このようにデータを保存したいと思います: 'Orders' - > 'OrdersFoods' - > 'OrdersFoodsChanges' OrdersFoodsTableは結合テーブル(Orders - Foods)です。Cakephp 3は、結合テーブルとその結合テーブルに関連付けられているテーブルにデータを保存します。

なぜ私はそうしたいのですか? Table OrdersFoodsには注文した食品(ids)に関する情報が含まれていますが、その食品に使用されているすべての成分に関する追加のデータを特定の順序で保存したいと思います。そのため、私はテーブルOrdersFoodsからIDを持つ追加のテーブル(OrdersFoodsChanges)を作成しました。

データを結合テーブルに保存できますが、別のテーブル(OrdersFoodsChangesTable)に保存することはできません。

  $order = $this->Orders->patchEntity($order, $this->request->data, [ 
      'associated' => [ 
       'Foods._joinData.OrdersFoodsChanges' 
       //'Foods.OrdersFoods.OrdersFoodsChanges' 
      ] 

をしかし、運を持つ:

私はそれを最も簡単な方法を行うことを試みました。

patchEntityオブジェクト

object(Admin\Model\Entity\Order) { 

'user_id' => (int) 1, 
'city' => '', 
'postal_code' => '', 
'street' => '', 
'house' => '', 
'phone' => '', 
'foods' => [ 
    (int) 0 => object(Admin\Model\Entity\Food) { 

     'id' => (int) 15, 
     'name' => 'Royal', 
     'price' => (float) 15, 
     'category_id' => (int) 2, 
     'photo_id' => (int) 69, 
     'shop_id' => (int) 1, 
     'favorite' => false, 
     'vat' => (int) 23, 
     'visible' => true, 
     'position' => (int) 0, 
     '_joinData' => object(Admin\Model\Entity\OrdersFood) { 

      'quantity' => (int) 1, 
      'orders_foods_changes' => [ 
       (int) 0 => object(Admin\Model\Entity\OrdersFoodsChange) { 

        'component_quantity' => (int) 25, 
        'component_id' => (int) 1, 
        'order_food_id' => (int) 1, 
        'type' => 'ADD', 
        'element_num' => (int) 1, 
        '[new]' => true, 
        '[accessible]' => [ 
         '*' => true 
        ], 
        '[dirty]' => [ 
         'component_quantity' => true, 
         'component_id' => true, 
         'order_food_id' => true, 
         'type' => true, 
         'element_num' => true 
        ], 
        '[original]' => [], 
        '[virtual]' => [], 
        '[errors]' => [], 
        '[invalid]' => [], 
        '[repository]' => 'Admin.OrdersFoodsChanges' 

       } 
      ], 
      '[new]' => true, 
      '[accessible]' => [ 
       '*' => true 
      ], 
      '[dirty]' => [ 
       'quantity' => true, 
       'orders_foods_changes' => true 
      ], 
      '[original]' => [], 
      '[virtual]' => [], 
      '[errors]' => [], 
      '[invalid]' => [], 
      '[repository]' => 'Admin.OrdersFoods' 

     }, 
     '[new]' => false, 
     '[accessible]' => [ 
      '*' => true 
     ], 
     '[dirty]' => [ 
      '_joinData' => true 
     ], 
     '[original]' => [ 
      '_joinData' => [ 
       'quantity' => '1', 
       'orders_foods_changes' => [ 
        (int) 0 => [ 
         'component_quantity' => (int) 25, 
         'component_id' => (int) 1, 
         'order_food_id' => (int) 1, 
         'type' => 'ADD', 
         'element_num' => (int) 1, 
         'id' => (int) 2 
        ] 
       ] 
      ] 
     ], 
     '[virtual]' => [], 
     '[errors]' => [], 
     '[invalid]' => [], 
     '[repository]' => 'Admin.Foods' 

    } 
], 
'price' => (float) 15, 
'shop_id' => (int) 1, 
'[new]' => true, 
'[accessible]' => [ 
    '*' => true 
], 
'[dirty]' => [ 
    'user_id' => true, 
    'type' => true, 
    'city' => true, 
    'postal_code' => true, 
    'street' => true, 
    'house' => true, 
    'phone' => true, 
    'foods' => true, 
    'price' => true, 
    'shop_id' => true 
], 
'[original]' => [], 
'[virtual]' => [], 
'[errors]' => [], 
'[invalid]' => [], 
'[repository]' => 'Admin.Orders' 

}

SQLログケーキでも最後のテーブルに何かを保存しようとしないから、私が見ることができるように。

私は何か助けに感謝します。

+0

実際の問題は何ですか?何がうまくいかない?エラーメッセージ?モデルの例? –

+0

@awons保存中にエラーはありません。私は自分の投稿を編集しました。私の推測では、OrdersFoodsChangesエンティティで何かが間違っているということです。いくつかの愚かな間違い。私は "フィールド"をマニュアルで追加しました。例:$ this-> request-> data ['foods'] ['_ joinData'] ['orders_foods_changes'] [0] ['component_id'] = 1; –

答えて

0

したがって、デフォルトでは、ケーキ保存メソッドは1つのレベルの関連付けしか行いませんでした。デフォルトでは

私はそれがすべてうまくいった関連する追加した場合にはsave()メソッドも団体

の1つのレベルを保存します。

 if ($this->Orders->save($order, [ 
      'associated' => ['Foods._joinData.OrdersFoodsChanges'] 
     ])) 
関連する問題