使用额外字段保存HABTM? [英] Saving HABTM with extra fields?
问题描述
我正在尝试保存订单以及订单中的产品。
订单正在保存,但产品不保存。
我有一个订单
表和产品
表和 orders_products
表。
在订单模型中,我设置 $ hasAndBelongsToMany ='Product'; $在
orders_products
表上,我有一个额外的字段: order_id。<$ c>
< ,
product_id
plus price
, $ b $ b $ this-> Order-> saveAll($ data);
p>
数组
(
[Order] => Array
[user_email ] => st@kr.com
[billing_first] => Steve
... //更多已排除
[total] => 5000
)
[Product] => Array
(
[0] => Array
(
[id] => 1
[price] => 5000.00
[quantity ] => 1
)
)
)
订单保存到订单表,但没有任何内容保存到orders_products表中。我期望orders_products表保存 [new_order_id],1,5000.00,1
:
注意(8):未定义的索引: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,第128行
CartsController :: checkout() - APP / controllers / carts_controller.php,第172行
Dispatcher :: _ invoke() - CORE / cake / dispatcher.php,行204
Dispatcher :: dispatch() - CORE / cake / dispatcher.php,行171
[main] - APP / webroot / index.php,第83行
任何想法?
解决方案 HABTM已过售。很多时候它不能满足需要,比如当你有额外的数据要存储。你最好在模型之间做一个hasMany / belongsTo关系。
取自CakePHP Book:
HABTM变成
时该怎么办?
b $ b HasAndBelongsToMany关系,Cake
将删除连接表
上的所有行,然后保存新的行。例如,如果
你有一个俱乐部有10个孩子
相关联。然后您更新俱乐部
与2个孩子。俱乐部将只有
有2个孩子,而不是12个。
还要注意,如果你想添加更多
字段到加入是
创建的或元信息)这是
可能与HABTM连接表,但
重要的是要了解你
有一个简单的选项。
HasAndBelongsTo两个模型之间的多个
实际上是通过
hasMany和belongsTo关联关联的三个
模型的简写。
在你的情况下,我建议创建一个 LineItem
模型,并以这种方式加入一切:
-
订单
hasMany LineItem
-
LineItem
belongsTo 订单
,产品
/ li>
I am trying to save an order, and the products in the order.
The order is being saved, but the products are not.
I have an orders
table and a products
table and a orders_products
table.
In the Order model I set $hasAndBelongsToMany = 'Product';
on the orders_products
table I have a couple extra fields: order_id
, product_id
plus price
, quantity
to capture the sale price and quantity sold.
I am saving the data via:
$this->Order->saveAll($data);
Here is what $data is:
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
)
)
)
The order gets saved to the order table but nothing is getting saved to the orders_products table. I am expected the orders_products table to save [new_order_id], 1, 5000.00, 1
I do get this notice:
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
Any ideas?
解决方案 HABTM is over-sold. A lot of the times it fails to meet the needs, such as when you have additional data to store. You'll be better off to do a hasMany/belongsTo relationship between the models.
Taken from the CakePHP Book:
What to do when HABTM becomes
complicated?
By default when saving a
HasAndBelongsToMany relationship, Cake
will delete all rows on the join table
before saving new ones. For example if
you have a Club that has 10 Children
associated. You then update the Club
with 2 children. The Club will only
have 2 Children, not 12.
Also note that if you want to add more
fields to the join (when it was
created or meta information) this is
possible with HABTM join tables, but
it is important to understand that you
have an easy option.
HasAndBelongsToMany between two models
is in reality shorthand for three
models associated through both a
hasMany and a belongsTo association.
In your case I would suggest making a LineItem
model and joining everything that way:
Order
hasMany LineItem
LineItem
belongsTo Order
, Product
这篇关于使用额外字段保存HABTM?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!