【问题标题】:Doctrine ORM default value of none existing entity不存在实体的 Doctrine ORM 默认值
【发布时间】:2017-05-23 15:36:27
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php mysql doctrine-orm composite-primary-key composite-key


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多