如何使Doctrine PostgreSQL外键约束DEFERRABLE

时间:2017-04-27 15:58:19

标签: php postgresql symfony doctrine-orm doctrine

使用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;

1 个答案:

答案 0 :(得分:1)

我用正在开发的应用程序遇到了同样的问题,得出的结论是,Doctrine DBAL中的DEFERRABLE支持未暴露于Doctrine ORM。

问题的症结在于,在ORM的SchemaTool中,除onDelete之外,collectRelationJoinColumns()方法没有发现任何$ fkOptions。为了支持添加“可延迟”,需要在ORM映射层中为其扩展语法。

就我而言,仅对SchemaTool进行补丁添加要比与上游协调以正确添加它容易,因为很少有人希望在Google上使用高级FK选项。

我认为我将在此处转储答案,以避免其他人不得不自己跟踪问题...

如果有人想提出有关该准则的ORM问题,请成为我的客人!