none 个现有实体的 Doctrine ORM 默认值
Doctrine ORM default value of none existing entity
假设我们有名为 Element
的实体,这些实体可能属于名为 Layout
的实体。元素和布局具有 ManyToOne
关系,其中许多元素属于一个 Layout
。
使用的数据库引擎是 MySQL,另外我们使用一个唯一键,layout_id
是其中的一部分。因此,我们在 Elements
table 中有一个名为 layout_id
的列,它不能是 null
(因为复合唯一键),并且默认值为 0
。 0
的值是一个神奇的值,在整个代码库中被视为 'No Layout assigned'(因此 Element
和 Layout
之间没有 FK)。
Doctrine ORM 的问题是它试图加载 ID 为 0
的布局,因为它不存在而无法找到。我们无法创建 ID 为 0
的 Layout
条目,因为 Layouts
有其他外键并且有其他约束。
关于如何克服这个问题有什么建议吗?基本上当 Element
中的 layout_id
是 0
时,我们不想加载 Layout
.
在这种情况下,您不能将此 layout_id
设置为复合键的一部分。这是因为外键约束。您的 layout_id
必须是 nullable
(这意味着它不能成为复合键的一部分),或者您必须在 layout
table 中使用 id 0(所以它可以用作标识符)。
一种解决方案是不使用复合键,而是添加一个主键列来唯一标识您的实体(代理键)。
假设我们有名为 Element
的实体,这些实体可能属于名为 Layout
的实体。元素和布局具有 ManyToOne
关系,其中许多元素属于一个 Layout
。
使用的数据库引擎是 MySQL,另外我们使用一个唯一键,layout_id
是其中的一部分。因此,我们在 Elements
table 中有一个名为 layout_id
的列,它不能是 null
(因为复合唯一键),并且默认值为 0
。 0
的值是一个神奇的值,在整个代码库中被视为 'No Layout assigned'(因此 Element
和 Layout
之间没有 FK)。
Doctrine ORM 的问题是它试图加载 ID 为 0
的布局,因为它不存在而无法找到。我们无法创建 ID 为 0
的 Layout
条目,因为 Layouts
有其他外键并且有其他约束。
关于如何克服这个问题有什么建议吗?基本上当 Element
中的 layout_id
是 0
时,我们不想加载 Layout
.
在这种情况下,您不能将此 layout_id
设置为复合键的一部分。这是因为外键约束。您的 layout_id
必须是 nullable
(这意味着它不能成为复合键的一部分),或者您必须在 layout
table 中使用 id 0(所以它可以用作标识符)。
一种解决方案是不使用复合键,而是添加一个主键列来唯一标识您的实体(代理键)。