Doctrine 2:如何获取关联配置以创建“not null”列?

时间:2011-12-04 23:02:54

标签: doctrine-orm

我试图让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)方法,为另一个问题交换一个问题。)

2 个答案:

答案 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