如何使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的主要内容,如果未能解决你的问题,请参考以下文章