【问题标题】:CakePHP: shortcomings with indirectly associated modelsCakePHP:间接关联模型的缺点
【发布时间】:2010-05-11 15:55:29
【问题描述】:

我在处理 cakephp 中的间接关联模型时遇到了一些问题。我目前的模型设置如下:

Deliveries hasOne License
License belongsTo Delivery
License hasAndBelongsToMany Product (and vice-versa)
License hasAndBelongsToMany ProductOption (and vice-versa)

我正在尝试将有关所有这些模型的信息保存在一个表单中。我遇到的缺点如下:

  1. 表单助手似乎只能看到一层深的字段类型。

  2. saveAll() 似乎只能将记录保存一层(对于多个模型表单)。

我到处寻找这些问题的解决方案,但由于我是 CakePHP 新手,我不确定处理这些问题的最新方法或“正确”方法是什么。

非常感谢任何建议。谢谢大家!

编辑:我在此处发布了失败尝试的代码:http://bin.cakephp.org/saved/58501

【问题讨论】:

  • 您能从您的表单中发布一些代码吗?在这种情况下,许可证是什么意思?
  • 我的公司通常会实际“交付”软件“许可证”,让客户可以运行他们购买的不同类型的软件“产品”以及购买的“产品选项”。

标签: cakephp model form-helpers model-associations


【解决方案1】:

saveAll() 似乎只能将记录保存一层(对于多个模型表单)。

我过去偶然发现了这个限制,当时我选择通过将我的表单分解为多个较小的表单来解决它。

使用 saveAll 和 InnoDB 表时要记住的一件事是您会获得原子事务,因为如果 Cake 无法将更改提交到数据库,它将执行回滚。

因此,虽然您显然可以使用自己的几行代码解决该问题(因为 Cake 的 saveAll 单行代码没有达到预期),但如果需要事务,您将不得不花费更多时间。

【讨论】:

    【解决方案2】:

    您好,我知道这是一篇旧帖子,但我认为我会发布此帖子以帮助其他人,从 CakePHP 2.1 开始,您可以使用调用 saveAll() 的选项保存多个级别的模型关联,更多详细信息在这里:@ 987654321@

    例子:

    $this->MyModel->saveAll($this->request->data, array('deep'=>true));
    

    至于 FormHelper 的限制,我和你一样迷茫,我可能会求助于手动设置输入类型,因为我的字段不需要太多验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 2012-08-02
      相关资源
      最近更新 更多