我的主机对象有许多与其关联的选项对象。在编辑表单中,用户可以选择(取消)选择选项并保存新的关联集。这是通过对发布的数据使用 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 http://book.cakephp.org/view/69/created-and-modified field.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)