如何使Doctrine PostgreSQL外键约束DEFERRABLE

问题描述 投票:3回答:1

使用Doctrine 2和PostgreSQL我需要创建外键约束DEFERRABLE和INITIALLY DEFERRED

在Doctrine / DBAL / Platforms / PostgreSqlPlatform.php中找到选项“deferrable”和“deferred”,但不知道在Entity注释中的哪个位置使用它

<?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;
php postgresql symfony doctrine-orm doctrine
1个回答
1
投票

我使用我正在处理的应用程序遇到了同样的问题,并得出结论,Doctrine DBAL中的DEFERRABLE支持不会暴露给Doctrine ORM。

问题的关键在于,在ORM的SchemaTool中,gatherRelationJoinColumns()方法除了onDelete之外没有发现任何$ fkOptions。为了支持添加'deferrable',需要在ORM映射层中为它扩展语法。

在我的情况下,仅仅修补SchemaTool以添加它比上游协调更容易添加它更容易,因为很少有人想要在Google上使用高级FK选项。

我以为我会在这里抛出一个答案,以避免其他人不得不自己追踪这个问题......

如果有人想提交有关它的Doctrine ORM问题,请成为我的客人!

© www.soinside.com 2019 - 2024. All rights reserved.