gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:48:49 26 4
gpt4 key购买 nike

我的宿主对象有许多与其关联的选项对象。在编辑表单中,用户可以(取消)选择选项并保存新的一组关联。这是通过对发布的数据使用 saveAll() 来实现的。结果是

  • 宿主(主要)对象已更新,
  • 同时包含在先前和新关联中的选项(关联)对象被更新,并且
  • 创建未包含在先前关联中但包含在新关联中的选项对象。

但是没有发生的是

  • 包含在先前关联中但不包含在新关联中的选项对象被删除。

问题: saveAll() 也可以做到这一点吗?要实现这种效果,数据结构必须是什么样子?

相关信息:

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

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

现在,如果原始主机有一个未包含在 0..n 数组中的关联选项,则 saveAll() 将不会检测到这一点,也不会删除该关联对象。

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

最佳答案

这不是一个优雅的解决方案,但对我有用。

if ($this->Main->saveAll($this->data))
{
$this->Main->query(sprintf(
'DELETE '
. 'FROM extraneous '
. 'WHERE main_id = \'%s\' AND modified < (SELECT modified FROM main WHERE id = \'%1$s\')'
, mysql_real_escape_string($this->Main->id)
));
}

请注意,您的表需要有一个 modified字段。

关于php - 有没有办法让 saveAll() 删除无关的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4088013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com