2016-06-06 4 views
0

Ich bin eine E-Commerce-App in cakephp3 für Essen und ich versuche, mehrere Datensätze für die gleiche product in die Join-Tabelle orders_products auf einmal zu speichern verschiedene _joinData.Speichern mehrerer Datensätze in die Join-Tabelle mit den gleichen IDs, aber verschiedene Daten

Es funktioniert wie erwartet, wenn ich mehrere Produkte speichern, die nicht die gleiche ID haben, aber wenn ich zwei Produkte mit der gleichen ID habe, tut es nicht. Zum Beispiel, wenn ich versuche, einen Caesar-Salat mit Französisch Dressing und einen Caesar-Salat mit Joghurtdressing ich zwei Aufzeichnungen bestellen müssen sparen:

wird
[ 
    'products' => [ 
     (int) 0 => [ 
      'id' => (int) 35, 
      '_joinData' => [ 
       'prodcut_variation' => 'yogurt dressing', 
       'product_name' => 'ceasar salad', 
       'product_net_price' => (float) 1.5, 
       'product_qty' => (int) 26, 
       'tax_id' => (int) 2 
      ] 
     ], 
     (int) 2 => [ 
      'id' => (int) 35, 
      '_joinData' => [ 
       'prodcut_variation' => 'french dressing', 
       'product_name' => 'ceasar salad', 
       'product_net_price' => (float) 1.5, 
       'product_qty' => (int) 10, 
       'tax_id' => (int) 2 
      ] 
     ], 
    ], 
] 

Aber cakephp nur die ersten speichern. Wie kann ich CakePHP sagen, um sie beide zu speichern?

Antwort

0

Use the 'through' Option.

<?php 

class OrdersTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->belongsToMany('Products', [ 
      'through' => 'OrdersProducts', 
     ]); 
     $this->hasMany('OrdersProducts'); 
    } 
} 

class ProductsTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->belongsToMany('Orders', [ 
      'through' => 'OrdersProducts', 
     ]); 
    } 
} 

class OrdersProductsTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     $this->belongsTo('Orders'); 
     $this->belongsTo('Products'); 
    } 
} 

Und dann den Auftrag wie folgt speichern:

[ 
    'orders_products' => [ 
     (int) 0 => [ 
      'product_id' => (int) 35, 
      'prodcut_variation' => 'yogurt dressing', 
      'product_name' => 'ceasar salad', 
      'product_net_price' => (float) 1.5, 
      'product_qty' => (int) 26, 
      'tax_id' => (int) 2 
     ], 
     (int) 2 => [ 
      'product_id' => (int) 35, 
      'prodcut_variation' => 'french dressing', 
      'product_name' => 'ceasar salad', 
      'product_net_price' => (float) 1.5, 
      'product_qty' => (int) 10, 
      'tax_id' => (int) 2 
     ], 
    ] 
]