我有一个表格,其中包含与Post相关的日志,我不希望删除帖子时删除其数据。
另一方面,我想删除帖子的所有评论以及其他数据。
我一直在看文档,但他们没有说什么: http://book.cakephp.org/2.0/en/models/deleting-data.html
感谢。
答案 0 :(得分:2)
你可以通过至少两种不同的方式做到这一点。
开启时,您正在调用$this->Post->delete($id, $cascade)
the second parameter is a boolean,表明删除操作是否还应删除任何相关记录 - 例如依赖在Post记录中:
$this->Post->delete($id, false);
不会删除任何相关记录。对于$this->Model->deleteAll();也是如此。当您想要将其设置为不是全局时。
取决于非常重要,因为此概念也可以在hasMany
或hasOne
关系的配置中设置,以便这是默认的删除行为:
public $hasMany = array(
'Log' => array(
'className' => 'Log',
'foreignKey' => 'post_id',
'dependent' => false
)
);
在此示例中,日志记录将在删除相关的帖子记录后删除 NOT 。
答案 1 :(得分:0)
您可以尝试删除关联,然后使用$this->Post->unbindModel('hasMany' => 'Log')
(或Post模型中的$this->unbindModel('hasMany' => 'Log'
)调用删除。
答案 2 :(得分:0)
如果您的后端是MySQL,您可以关闭外键检查(SET FOREIGN_KEY_CHECKS = 0;),删除父Post及其注释,并重新启用外键检查(SET FOREIGN_KEY_CHECKS = 1;)。 但我不建议这样做。
我倾向于在帖子上实现'软删除'(给它一个'删除'字段并添加一个索引,当你删除它时你设置为true)并更新你的前端查询以忽略任何帖子删除= 1
有一些软删除行为,但代码实现起来非常简单。