none 个现有实体的 Doctrine ORM 默认值

Doctrine ORM default value of none existing entity

假设我们有名为 Element 的实体,这些实体可能属于名为 Layout 的实体。元素和布局具有 ManyToOne 关系,其中许多元素属于一个 Layout

使用的数据库引擎是 MySQL,另外我们使用一个唯一键,layout_id 是其中的一部分。因此,我们在 Elements table 中有一个名为 layout_id 的列,它不能是 null(因为复合唯一键),并且默认值为 00 的值是一个神奇的值,在整个代码库中被视为 'No Layout assigned'(因此 ElementLayout 之间没有 FK)。

Doctrine ORM 的问题是它试图加载 ID 为 0 的布局,因为它不存在而无法找到。我们无法创建 ID 为 0Layout 条目,因为 Layouts 有其他外键并且有其他约束。

关于如何克服这个问题有什么建议吗?基本上当 Element 中的 layout_id0 时,我们不想加载 Layout.

在这种情况下,您不能将此 layout_id 设置为复合键的一部分。这是因为外键约束。您的 layout_id 必须是 nullable(这意味着它不能成为复合键的一部分),或者您必须在 layout table 中使用 id 0(所以它可以用作标识符)。

一种解决方案是不使用复合键,而是添加一个主键列来唯一标识您的实体(代理键)。