Значение доктрины ORM по умолчанию для несуществующего объекта

Допустим, у нас есть объекты, которые названы Elementэти МОГУТ принадлежать Layout, Элементы и макеты имеют ManyToOne отношение, где многие элементы принадлежат одному Layout,

Используемым механизмом обработки данных является MySQL, кроме того, мы используем уникальный ключ, который layout_id является частью. Итак, поэтому мы имеем в Elements таблица, столбец называется layout_id чего не может быть null (из-за составного уникального ключа) и имеет значение по умолчанию 0, Значение 0 является магическим значением и обрабатывается как «Нет назначенного макета» по всей базе кода (между FK нет Element а также Layout из-за этого).

Проблема с Doctrine ORM заключается в том, что он пытается загрузить макет с идентификатором 0, который он не может найти, потому что он не существует. Мы не можем создать Layout запись с ID 0 так как Layouts есть другие внешние ключи и есть другие ограничения.

Есть ли какие-либо предложения о том, как это преодолеть. В основном, когда layout_id в Element является 0мы хотели бы не загружать Layout,

1

Решение

В таком случае вы не можете установить это layout_id как часть составного ключа. Это из-за ограничения внешнего ключа. Либо ваш layout_id должен быть nullable (это означает, что он не может быть частью составного ключа) или вы должны сделать строку в вашем layout таблица с идентификатором 0 (поэтому ее можно использовать как идентификатор).

Решением может быть не использовать составной ключ, а вместо этого добавить столбец первичного ключа для уникальной идентификации вашей сущности (суррогатный ключ).

1

Другие решения

Других решений пока нет …