Как обновить строку таблицы при удалении строки в другой таблице, используя Doctrine? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть сущность "A" со следующим свойством:

manyToOne:
    b:
        targetEntity: App\Entity\B
        joinColumn:
            name: b_id
            referencedColumnName: id

Как я могу обновить значение сущности "A" при немедленном удалении сущности "B"?

Например:

$a = new A();
$b = $bRepository->find(1);
$a->setB($b);
$em->persist($a);
$em->flush();

// table a:         table b:
// +----+------+    +----+
// | id | b_id |    | id |
// +----+------+    +----+
// |  1 |    1 |    |  1 |
// +----+------+    +----+

$em->remove($b);
$em->flush();

// table a:         table b:
// +----+------+    +----+
// | id | b_id |    | id |
// +----+------+    +----+
// |  1 | NULL |
// +----+------+

Я могу сделать это с помощью триггера MySQL, но, возможно, существует некоторая конфигурация для таблицы или доктрины, чтобы сделать это без триггеров?

Основная проблема заключается в том, чтоЯ не могу изменить сущность «B» или обновить сущность «A», удалив $a->setB(null); $em->persist($a); на «B», поскольку она находится в общем комплекте и используется в нескольких проектах

1 Ответ

0 голосов
/ 07 июня 2019

Нашел решение, которое раньше не замечал: Ссылочное действие MySQL "ON DELETE" со значением "SET NULL". Смотрите скрипку: http://sqlfiddle.com/#!9/49e79b/1

ALTER TABLE a ADD FOREIGN KEY (b_id) REFERENCES b (id) ON DELETE SET NULL ON UPDATE CASCADE;
manyToOne:
    b:
        targetEntity: App\Entity\B
        joinColumn:
            name: b_id
            referencedColumnName: id
            onDelete: SET NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...