php – 有没有办法让saveAll()删除无关的对象?

我的主机对象有许多与之关联的选项对象.在编辑表单中,用户可以(de)选择选项并保存新的关联集.这是使用发布数据上的saveAll()实现的.结果是

>主机(主)对象已更新,
>更新先前和新关联中包含的选项(关联)对象,以及
>创建未包含在先前关联中但包含在新关联中的选项对象.

但是没有发生的事情是

>删除先前关联中包含但未包含在新关联中的选项对象.

问题:saveAll()也可以这样做,数据结构如何实现这种效果

相关信息:

我处理编辑表单的代码实际上更复杂(因此我在这里没有引用它),但它导致了书中描述的数据结构:

( [Host] => ( ... host object fields ... ),
  [Option] => ( [0] => ( ... first option object fields ... ),
                ...
                [n] => ( ... nth option object fields ... )
              )
)

现在,如果原始主机具有未包含在0..n数组中的关联选项,则saveAll()将不会检测到此选项,并且不会删除该关联对象.

不确定这是否相关,但我使用的是CakePHP 1.3.

解决方法:

HABTM删除所有相关记录,然后重新创建所需内容.正如PawelMysior建议的那样,您可以通过在保存之前手动删除关联记录来使用hasMany实现此目的.但是,危险在于保存失败,你失去了以前的状态.

我会使用GJ解决方案的变体并在成功保存后删除它们,而是循环遍历冗余ID数组并使用Cake的Model-> del()方法.这样您就可以保留所有内置错误处理.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...