使用额外字段保存HABTM?

JD *_*cks 4 php mysql cakephp cakephp-1.3

我正在尝试保存订单,以及订单中的产品.

订单正在保存,但产品不是.

我有一张orders桌子,一张products桌子和一张orders_products桌子.

在我订的订单模型中 $hasAndBelongsToMany = 'Product';

orders_products表我有几个额外的字段:order_id,product_idprice,quantity捕捉销售价格和销售数量.

我通过以下方式保存数据:

$这 - >命令中─>白水回收($数据);

以下是$ 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
                )

        )

)
Run Code Online (Sandbox Code Playgroud)

订单会保存到订单表中,但不会将任何内容保存到orders_products表中.我期望orders_products表保存[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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jas*_*ary 9

HABTM过度销售.很多时候它无法满足需求,例如当您有额外的数据存储时.你最好在模型之间做一个hasMany/belongsTo关系.

摘自CakePHP书:

当HABTM变得复杂时该怎么办?

默认情况下,在保存HasAndBelongsToMany关系时,Cake将删除连接表上的所有行,然后再保存新的行.例如,如果您有一个有10个孩子关联的俱乐部.然后,您将与2名儿童一起更新俱乐部.俱乐部只有2个孩子,而不是12个孩子.

另请注意,如果要为连接添加更多字段(创建时或元信息),可以使用HABTM连接表,但重要的是要了解您有一个简单的选项.

两个模型之间的HasAndBelongsToMany实际上是通过hasMany和belongsTo关联关联的三个模型的简写.

在你的情况下,我建议制作一个LineItem模型并以这种方式加入所有内容:

  • Order 有很多 LineItem
  • LineItem属于Order,Product