我正在尝试保存订单以及订单中的产品。
订单已保存,但产品未保存。
我有一张orders桌子,一张products桌子和一张orders_products桌子。
orders
products
orders_products
在订单模型中,我设置了 $hasAndBelongsToMany = 'Product';
$hasAndBelongsToMany = 'Product';
在orders_products桌子上,我有几个额外的字段:order_id,product_id加上price,quantity以记录销售价格和售出数量。
order_id
product_id
price
quantity
我通过以下方式保存数据:
$ this-> Order-> saveAll($ data);
这是$ data是什么:
Array ( [Order] => Array ( [user_email] => st@kr.com [billing_first] => Steve ... //more excluded [total] => 5000 ) [Product] => Array ( [0] => Array ( [id] => 1 [price] => 5000.00 [quantity] => 1 ) ) )
订单已保存到订单表,但什么也没有保存到orders_products表。我希望orders_products表可以保存[new_order_id], 1, 5000.00, 1
[new_order_id], 1, 5000.00, 1
我确实收到此通知:
Notice (8): Undefined index: id [CORE/cake/libs/model/model.php, line 1391] Model::__saveMulti() - CORE/cake/libs/model/model.php, line 1391 Model::save() - CORE/cake/libs/model/model.php, line 1355 Model::__save() - CORE/cake/libs/model/model.php, line 1778 Model::saveAll() - CORE/cake/libs/model/model.php, line 1673 CartsController::saveOrder() - APP/controllers/carts_controller.php, line 128 CartsController::checkout() - APP/controllers/carts_controller.php, line 172 Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 204 Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171 [main] - APP/webroot/index.php, line 83
有任何想法吗?
HABTM已超卖。很多时候它无法满足需求,例如当您要存储其他数据时。您最好在模型之间建立一个hasMany / belongsTo关系。
摘自CakePHP书:
HABTM变得复杂时该怎么办? 默认情况下,保存HasAndBelongsToMany关系时,Cake将在保存新行之前删除联接表上的所有行。例如,如果您有一个包含10个子级的俱乐部。然后,您更新有2个孩子的俱乐部。俱乐部只有2个孩子,没有12个孩子。 还要注意,如果要向联接中添加更多字段(创建联接或添加元信息时),可以通过HABTM联接表来实现,但是了解这一点很重要,这一点很重要。 实际上,两个模型之间的HasAndBelongsToMany是通过hasMany和belongsTo关联而关联的三个模型的简写。
HABTM变得复杂时该怎么办?
默认情况下,保存HasAndBelongsToMany关系时,Cake将在保存新行之前删除联接表上的所有行。例如,如果您有一个包含10个子级的俱乐部。然后,您更新有2个孩子的俱乐部。俱乐部只有2个孩子,没有12个孩子。
还要注意,如果要向联接中添加更多字段(创建联接或添加元信息时),可以通过HABTM联接表来实现,但是了解这一点很重要,这一点很重要。
实际上,两个模型之间的HasAndBelongsToMany是通过hasMany和belongsTo关联而关联的三个模型的简写。
在您的情况下,我建议您LineItem建立模型并以这种方式加入所有内容:
LineItem
Order
Product