我试图让Doctrine 2创建所有设置为“not null”的列。我不希望MySQL(或其他)数据库中有任何空值。根据文档,对于通过Doctrine创建的字段,默认值不为null。但是,这似乎并没有延伸到协会。从技术上讲,我是通过Symfony 2来做到的,但问题在于我如何使用包含的Doctrine 2。
以下是我正在使用的两个已清理的实体(在YAML中):
App\Entity\Foo:
type: entity
table: foo
id:
id:
type: integer
generator:
strategy: AUTO
fields:
name:
type: string
length: '64'
manyToOne:
bar:
targetEntity: Bar
App\Entity\Bar:
type: entity
table: bar
id:
id:
type: integer
generator:
strategy: AUTO
fields:
name:
type: string
length: '64'
生成的create和alter table查询:
CREATE TABLE bar (id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(64) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE foo (id INT AUTO_INCREMENT NOT NULL,
bar_id INT DEFAULT NULL, name VARCHAR(64) NOT NULL,
INDEX IDX_8C73652189A253A (bar_id), PRIMARY KEY(id)) ENGINE = InnoDB;
ALTER TABLE foo ADD CONSTRAINT FK_8C73652189A253A FOREIGN KEY (bar_id) REFERENCES bar(id)
我尝试在文档中搜索答案,尝试在manyToOne / bar条目中设置“nullable:false”,并为“bar_id”创建一个单独的字段(最接近但导致实体同时包含setBarId和setBar)方法,为另一个问题交换一个问题。)
答案 0 :(得分:2)
根据我的经验,有两种方法。 第一:实施手册http://www.doctrine-project.org/docs/orm/2.1/en/reference/association-mapping.html?highlight=constraint#one-to-many-bidirectional中列出的双向关联。而且在连接列中添加 - nullable:false
第二:将您的列添加到部分字段,并且可以显示为此连接列添加所需的所有选项
答案 1 :(得分:1)
尝试将nullable设置为joinColumn的属性:
App\Entity\Foo:
type: entity
[...]
manyToOne:
bar:
targetEntity: Bar
joinColumn:
nullable: false