Php 无现有实体的默认值
假设我们有名为Php 无现有实体的默认值,php,mysql,doctrine-orm,composite-primary-key,composite-key,Php,Mysql,Doctrine Orm,Composite Primary Key,Composite Key,假设我们有名为元素的实体,这些实体可能属于名为布局的实体。元素和布局具有manytone关系,其中许多元素属于一个Layout 使用的数据库引擎是MySQL,另外我们使用一个唯一的键,layout\u id就是其中的一部分。因此,我们在元素表中有一个名为layout\u id的列,该列不能为null(因为复合唯一键),默认值为0。0的值是一个神奇的值,在整个代码库中被视为“未分配布局”(因此元素和布局之间没有FK) Doctrine ORM的问题是,它试图加载ID为0的布局,但找不到,因为它不存
元素
的实体,这些实体可能属于名为布局
的实体。元素和布局具有manytone
关系,其中许多元素属于一个Layout
使用的数据库引擎是MySQL,另外我们使用一个唯一的键,layout\u id
就是其中的一部分。因此,我们在元素
表中有一个名为layout\u id
的列,该列不能为null
(因为复合唯一键),默认值为0
。0
的值是一个神奇的值,在整个代码库中被视为“未分配布局”(因此元素
和布局
之间没有FK)
Doctrine ORM的问题是,它试图加载ID为0
的布局,但找不到,因为它不存在。我们无法创建ID为0
的Layout
条目,因为Layouts
具有其他外键,并且具有其他约束
有没有关于如何克服这一问题的建议。基本上,当
元素
中的布局id
为0
时,我们不希望加载布局
,在这种情况下,您无法将此布局id
设置为复合键的一部分。这是因为外键约束。您的layout\u id
必须是nullable
(这意味着它不能是复合键的一部分),或者您必须在layout
表中创建一行id为0(因此它可以用作标识符)
解决方案可以是不使用复合键,而是添加一个主键列来唯一标识实体(代理键)