我的主机对象有许多与之关联的选项对象.在编辑表单中,用户可以(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()方法.这样您就可以保留所有内置错误处理.
标签:php,transactions,cakephp 来源: https://codeday.me/bug/20190606/1189496.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。