我有3张桌子:
任务表将具有所有task_name
,文件夹表将具有folder_name
,task_count
和文件夹任务< / strong>是一个数据透视表,它将存储folder_id
和task_id
。
所有表都具有多对多关系。
我添加了级联删除任务。因此,如果我删除任务,那么它将删除所有地方,包括数据透视表。我正在使用雄辩的删除来删除任务。一切正常
但是,删除任务后,我需要更新文件夹表中每个文件夹的任务计数。
由于一个任务可以存储在多个文件夹中,因此很难在级联删除的任务上更新所有文件夹的task_count
的计数。我被困在这里。
如何更新所有task_count
个受影响的文件夹?
答案 0 :(得分:0)
您可以使用mysql触发器。这是示例。
USE `test`;
DELIMITER
$$
CREATE TRIGGER `tasks_ADEL`
AFTER DELETE ON tasks FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
BEGIN
update folder as f right join folder_tasks as ft on f.id = ft.folder_id set task_count = task_count + 1 where ft.task_id = OLD.id
END;
$$
在这里您可以找到使用示例https://www.w3resource.com/mysql/mysql-triggers.php#MTAD
答案 1 :(得分:0)
最后,我找到了一种自己更新tasks_count
的方法。这可能不是有效的方法,但是可以解决问题。
$task = Tasks::find($domain_id);
$folders = $task->folders->pluck('pivot.folder_id');
Tasks::where('user_id', $user_id)->where('id', $domain_id)->delete();
foreach($folders as $key => $value){
$folder_table = Folder::find($value);
$folder_table->tasks_count = $folder_table->tasks()->count();
$folder_table->save();
}