如何使Doctrine PostgreSQL外键约束DEFERRABLE

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使Doctrine PostgreSQL外键约束DEFERRABLE相关的知识,希望对你有一定的参考价值。

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

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

<?php 
/**
 * Class User
 *
 * @ORMTable(name="jira_issues_changelogs")
 * @ORMEntity
 * @package JiraBundleEntityIssue
 */
class Changelog
{
    /**
     * @var string
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="NONE")
     */
    protected $id;

    /**
     * @ORMManyToOne(targetEntity="JiraBundleEntityIssue", inversedBy="changelog")
     * @ORMJoinColumn(name="issue", referencedColumnName="id")

     Need this column foreign key to be DEFERRABLE INITIALLY DEFERRED

     */
    protected $issue;
答案

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

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

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

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

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

以上是关于如何使Doctrine PostgreSQL外键约束DEFERRABLE的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 Doctrine2 Migrations:Diff 总是添加数据库中已经存在的外键关系?

禁用 Doctrine 外键约束

添加相关实体时,Doctrine 对象未设置外键

Doctrine 2 - 多对一关系的外键不允许空值

使用 Doctrine Record 设置外键

Symfony/Doctrine 类表继承和外键作为主键