微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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()方法.这样您就可以保留所有内置错误处理.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐