Ecto.Schema различия между nilify_all, ничем, и delete_all? - PullRequest
0 голосов
/ 01 ноября 2018

Я определяю схему для моих моделей user и role в приложении Phoenix. Роль has_many пользователей и пользователь belongs_to роли. Похоже, есть 3 различных варианта on_delete:: nilify_all, nothing (по умолчанию) и delete_all.

Когда я смотрю на Ecto.Schema страницу, я не могу найти определение того, что каждый из них делает.

В чем разница между nilify_all, nothing и delete_all - когда мне следует использовать каждый?

1 Ответ

0 голосов
/ 01 ноября 2018

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

Учитывая ваш пример, где role имеет много users:

  • delete_all: удаляет связанные записи при удалении родительской записи. Например, в вашем случае удаление role приведет к удалению всех users, связанных с этой ролью.

  • nilify_all: устанавливает ключ в связанной таблице, который указывает на родительскую запись, равным nil при удалении родительской записи. Например, когда роль удалена, для role_id в таблице users будет установлено значение nil тех пользователей, которые принадлежали к этой роли.

  • nothing: Это не повлияет на связанные записи при удалении родительской записи. Однако это приведет к ошибке, если связанная таблица имеет ограничение внешнего ключа обратно в родительскую таблицу.

...