Обновление счетчика папок при каскадном удалении в Laravel через eloquent - PullRequest
0 голосов
/ 27 мая 2019

У меня есть 3 таблицы:

  1. Задачи
  2. Папки
  3. Задачи папок

Задачи таблицабудет иметь все таблицы task_name, Папка будет иметь folder_name, task_count и Задачи папки - это сводная таблица, в которой будут храниться folder_id и task_id.

Все таблицы имеют отношения "многие ко многим".

Я добавил задачи каскадного удаления.Итак, если я удалю задачу, она будет удалена повсюду, включая сводную таблицу.Я удаляю задачи, используя красноречивое удаление.Это нормально работает

Но мне нужно обновить количество задач для каждой папки в таблице Папки , как только я удалю задачу.

Поскольку задача может быть сохраненав нескольких папках трудно обновить счетчик всех папок task_count для каскадно удаленных задач.Я застрял здесь.

Как я могу обновить все task_count затронутых папок?

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Наконец-то я нашел способ обновить 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();
}
0 голосов
/ 27 мая 2019

Вы можете использовать триггер 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...