条件相关记录删除在afterDelete()
我有以下设置:条件相关记录删除在afterDelete()
型号:
Team
Task
Change
TasksTeam
TasksTeam
是hasManyThrough,该团队的任务相关联。 Change
用于记录任务细节的变化,包括团队被连接/分离时(即通过TasksTeam
中的记录)。
TasksTeam
也级联删除Task
。如果任务被删除,所有相关的团队关联也应该被删除。
当一个TasksTeam
被删除,这意味着一个团队已经离开了一个任务,我想为此记录一个Change
。我正在使用TasksTeam afterDelete()
来记录队伍离开。在TasksTeam beforeDelete
我保存数据到$this->predelete
,所以它将在afterDelete()
可用。
这里是TasksTeam
非工作代码:
public function afterDelete(){
$team_id = $this->predelete['TasksTeam']['team_id'];
$task_role_id = $this->predelete['TasksTeam']['task_role_id'];
$task_id = $this->predelete['TasksTeam']['task_id'];
// Wanted: only record a change if the task isn't deleted
if($this->Task->exists($task_id)){
$this->Task->Change->removeTeamFromTask($task_id, $team_id, $task_role_id);
}
return true;
}
问题:
当任务被删除,删除级联到TasksTeam
正确。但是,即使任务被删除,也会记录更改。从另一个答案在SO类似的东西,我想原因是,当它击中回调Model:del()
之前调用,这意味着任务尚未被删除TasksTeam
afterDelete()
问题
我怎样才能只有在任务未被删除的情况下才能成功保存Change
?
在此先感谢。
使用来自@詹姆斯·邓恩我最终加入TINYINT场到Task
模型的建议称为is_deleted
和简单地设置这个布尔在Task
beforeDelete()
如此。然后我检查这个标志,如果标志是boolean false,那么只保存Change
。添加一个字段的东西只是在记录被删除之前受到影响似乎很浪费,但对于我的目的来说它工作正常。我认为一个“真正的解决方案”将涉及Cake Events System,避免了链接回调的需要。
如果在实际删除之前调用回调被调用,我会看到维护一个assoc。将任务ID作为关键字的标志数组或在Task
上调用afterDelete
时添加的一组任务标识。然后,您可以在Task
中创建一个方法,如isDeleting
或查询该数组的相似方法,告诉您该任务是否正在被删除。