我有以下设置:
型号:
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
?
提前致谢。
答案 0 :(得分:1)
如果在实际删除之前调用了回调,我会看到维护一个assoc。任务ID作为键的标志数组或一组任务ID,在afterDelete
上调用Task
时添加。然后,您可以在Task
中创建一个方法,例如isDeleting
或类似的查询数组的方法,告诉您该任务是否正在被删除。
答案 1 :(得分:0)
使用@James Dunne的建议我最终在名为Task
的{{1}}模型中添加了一个tinyint字段,只需在is_deleted
Task
中设置此布尔值为true。然后,我检查此标志,如果标志为布尔值false,则仅保存beforeDelete()
。为记录被删除之前仅受影响的内容添加字段似乎很浪费,但为了我的目的,它可以正常工作。我认为这是一个真正的解决方案"将涉及Cake Events System,避免需要链式回调。