通过雄辩

时间:2019-05-27 12:51:23

标签: mysql laravel eloquent

我有3张桌子:

  1. 任务
  2. 文件夹
  3. 文件夹任务

任务表将具有所有task_name文件夹表将具有folder_nametask_count文件夹任务< / strong>是一个数据透视表,它将存储folder_idtask_id

所有表都具有多对多关系。

我添加了级联删除任务。因此,如果我删除任务,那么它将删除所有地方,包括数据透视表。我正在使用雄辩的删除来删除任务。一切正常

但是,删除任务后,我需要更新文件夹表中每个文件夹的任务计数。

由于一个任务可以存储在多个文件夹中,因此很难在级联删除的任务上更新所有文件夹的task_count的计数。我被困在这里。

如何更新所有task_count个受影响的文件夹?

2 个答案:

答案 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();
}