Допустим, у нас есть объекты, которые названы 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
,
В таком случае вы не можете установить это layout_id
как часть составного ключа. Это из-за ограничения внешнего ключа. Либо ваш layout_id
должен быть nullable
(это означает, что он не может быть частью составного ключа) или вы должны сделать строку в вашем layout
таблица с идентификатором 0 (поэтому ее можно использовать как идентификатор).
Решением может быть не использовать составной ключ, а вместо этого добавить столбец первичного ключа для уникальной идентификации вашей сущности (суррогатный ключ).
Других решений пока нет …