使用Doctrine2和PostgreSQL我需要创建外键约束DEFERRABLE和INITIALLY DEFERRED
找到期权" deferrable"并且"延期"在Doctrine / DBAL / Platforms / PostgreSqlPlatform.php中,但不知道在实体注释中何处使用它
<?php
/**
* Class User
*
* @ORM\Table(name="jira_issues_changelogs")
* @ORM\Entity
* @package JiraBundle\Entity\Issue
*/
class Changelog
{
/**
* @var string
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="\JiraBundle\Entity\Issue", inversedBy="changelog")
* @ORM\JoinColumn(name="issue", referencedColumnName="id")
Need this column foreign key to be DEFERRABLE INITIALLY DEFERRED
*/
protected $issue;
答案 0 :(得分:1)
我用正在开发的应用程序遇到了同样的问题,得出的结论是,Doctrine DBAL中的DEFERRABLE支持未暴露于Doctrine ORM。
问题的症结在于,在ORM的SchemaTool中,除onDelete之外,collectRelationJoinColumns()方法没有发现任何$ fkOptions。为了支持添加“可延迟”,需要在ORM映射层中为其扩展语法。
就我而言,仅对SchemaTool进行补丁添加要比与上游协调以正确添加它容易,因为很少有人希望在Google上使用高级FK选项。
我认为我将在此处转储答案,以避免其他人不得不自己跟踪问题...
如果有人想提出有关该准则的ORM问题,请成为我的客人!