当前位置: 首页 > 面试题库 >

要保存带有额外字段的HABTM吗?

叶茂
2023-03-14
问题内容

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

订单已保存,但产品未保存。

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

在订单模型中,我设置了 $hasAndBelongsToMany = 'Product';

orders_products桌子上,我有几个额外的字段:order_idproduct_id加上pricequantity以记录销售价格和售出数量。

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

$ 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

我确实收到此通知:

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关联而关联的三个模型的简写。

在您的情况下,我建议您LineItem建立模型并以这种方式加入所有内容:

  • Order 有很多 LineItem
  • LineItem属于OrderProduct


 类似资料:
  • 我正在尝试在我的设计表单上添加一个额外的字段,如下所示: 我必须允许额外的字段,所以我创建了一个新的初始值设定项devise_permitted_parameters.rb,如下所示 输出如下: "email"=? LIMIT?[["email","wtgwg@gmail.com "], ["LIMIT",1]]SQL(1.1ms)插入到"用户"("email","encrypted_passwo

  • 问题内容: 我有这两个课(表) 还有这个: 运行此代码后,在数据库(student_course)中创建了一个额外的表,现在我想知道如何在该表中添加额外的字段,例如(Grade,Date和…(我的意思是student_course表)),我看到了一些解决方案,但我不喜欢它们,而且我对它们有一些问题: 第一个样品 问题答案: 如果在链接表(STUDENT_COURSE)上添加额外的字段,则必须根据s

  • 我在使用复合主键创建实体时遇到问题,该键也是外键。这是我的表和关系表原理图。当我想创建新闻实体时,我收到了带有null creatingnews的错误消息。新闻翻译有复合主键,外键引用到新闻表。 这是我的代码: 新闻聚合 新闻翻译 标签 新闻语言ID 在NewsFactory中,我希望使用NewsTranslation创建NewsAggregate,但有错误消息NullPointer。 新闻工厂

  • 我在MongoDB中有一些地理空间数据,我想找到靠近用户位置并符合某些标准的地方列表。 下面是我的文档结构: 现在我正试图通过纬度,经度,找到有票可用的,并且是某种类型的地方。当我只使用带坐标的NearQuery(不添加查询)时,我得到的是结果,但当我添加查询对象时,我得到的是空列表。 提前致谢

  • 我读过,在呈现UI的片段上设置可能会导致内存泄漏。 有人能解释一下为什么会发生这种情况吗?我在任何地方都没有找到详细的解释。

  • 问题内容: 当使用SQL MIN()函数以及GROUP BY时,是否有任何其他列(不是MIN列或GROUP BY列之一)与匹配的MIN行中的数据匹配? 例如,给定一个包含部门名称,员工名称和薪水的表: 显然,我会得到两个不错的专栏,最低工资和部门。员工名称(和其他任何员工字段)是否来自同一行?即带有MIN(salary)的行? 我知道有可能很可能是两个员工具有相同(最低)的薪水,但我很担心(现在)