我在CakePHP 2.6上
我想删除几个依赖模型......
Users hasMany ConversationsUser (join model)
ConversationsUser belongsTo User
belongsTo Conversation
Conversation hasMany ConversationsUser
所有关系均为dependent => TRUE
当我删除用户时,我希望删除所有ConversationsUser以及所有对话。
目前,只有ConversationsUser被删除。对话仍然存在。
理论:也许级联不会在多个关系中递归地工作......
所以我将它添加到ConversationsUser模型
public function beforeDelete ( $cascade = true ) {
$this->log( $this->conversation_id );
$this->log( $this->ID );
#delete all conversations
$this->Conversation->delete( $this->conversation_id );
return TRUE;
}
这个STILL不起作用......并且这两个属性都没有出现在日志中,虽然时间戳已经开始(所以我知道回调正在运行)。
beforeDelete()
注意:如果相关,我的所有模型都使用可包含的行为
更新 由于我似乎对我要做的事情感到困惑,我将提供一些背景信息。该应用程序允许两个不同的用户进行"对话"其中有很多消息。用户在会话中的成员资格由与ConversationsUser(连接表)模型的hasMany关系定义。如果管理员删除了对话中的一个用户,则需要删除所有该用户的消息,对话和对话用户... 以及对话用户已删除的对话中的其他参与者。否则那些其他用户就会在没有人的情况下进行对话,事情会中断。
答案 0 :(得分:1)
这是一个不完整的答案 - 我现在无法编写和测试实际代码。
在您的用户模型中,添加beforeDelete回调。这个回调需要
$this->ConversationsUser->findAllByUserId($this->id, array('conversation_id'))
)$this->ConversationUser->Conversation->delete($conversation_id,true);
您在ConversationUser模型中不需要beforeDelete。
这有效:
public function beforeDelete( $cascade = TRUE ) {
#delete all conversations
$conversationIns = $this->ConversationIn->find('all', array('conditions'=>array('ConversationIn.user_id'=>$this->id)));
foreach ($conversationIns as $conversationIn ) {
$delete = $this->ConversationIn->Conversation->delete( $conversationIn['ConversationIn']['conversation_id'] );
}
return TRUE;
}