没有外键约束的Doctrine 2关联

chi*_*org 8 php database symfony doctrine-orm

我正在将遗留PHP应用程序转换为Symfony 2.应用程序数据目前不是很一致,所以我想避免创建外键约束.我的"Product"实体类中有以下注释:

class Product {

  // some definitions

  /**
   * @ORM\ManyToOne(targetEntity="Manufacturer")
   * @ORM\JoinColumn(name="manufacturer_id", referencedColumnName="id" )
   */
  private $Manufacturer;
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时app/console doctrine:schema:update,我得到了SQL命令

 ALTER TABLE products ADD CONSTRAINT FK_F6FA18741C3BF575 
   FOREIGN KEY (manufacturer_id) REFERENCES manufacturer(id);
Run Code Online (Sandbox Code Playgroud)

我怎么能避免这个?

Pie*_*eau 12

我最近必须经历相同的过程,幸运的是有一个简单的解决方案,只需添加nullable=true到列的注释.

只要现有数据有效,这将有效,在我的情况下,我必须将0更改为NULL并将不再存在的键更改为NULL.

  • 我将它添加到我的`JoinColumn`注释中,但仍在创建外键约束. (6认同)

Cer*_*rad 7

基本上你无法阻止生成sql命令.至少没有深入研究Doctrine代码.

但是,您不需要将约束实际应用于数据库.如果没有它们,D2将正常工作.

  • 是的,但是我不能再使用命令`app / console doctrine:schema:update --force`,因为当更新尝试执行FK约束时,更新将停止。 (2认同)