Doctrine 在 MySQL 中不生成跨数据库外键约束
Doctrine not generating cross-database foreign key constraints in MySQL
我有两个表,db1.Contact 和 db2.Recipient。每个收件人都应该是一个联系人,所以我在 db1.Contact.ContactID 字段的两个表之间设置了一个外键。
我在 Recipient.php 中用以下注释表示:
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="\db1\Contact")
* @ORM\JoinColumn(name="ContactID", referencedColumnName="ContactID")
**/
private $Contact;
为此,我不需要 Contact.php 中的任何代码。
当我生成数据库时(使用 doctrine orm:schema-tool:create --dump-sql)我可以看到创建了 Recipient.ContactID 字段并为其提供了索引。但是,不会生成和执行任何查询来创建外键约束。所以要明确一点,我没有收到任何错误,但从未生成约束。
我该如何解决这个问题? doctrine 肯定支持跨库外键?我查看了注释文档并查看是否有创建工具的任何选项,但我看不到任何打开此功能的方法。
您的 ManyToOne
关联似乎有误。如果你的代码库是命名空间的,你应该使用实体的 FQCN(或者如果双方的实体位于同一目录中,则只使用类名), 而不是 table 名称 。
例如
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="YourNamespace\Entities\Contact")
* @ORM\JoinColumn(name="ContactID", referencedColumnName="ContactID")
**/
private $contact;
您可能想阅读有关关联映射的更多信息here。
Doctrine 不支持跨数据库 FK:
In Doctrine, joining data across databases is not technically
“supported” by a designed feature, but you can make it work by
tricking Doctrine a little bit.
来源:http://www.doctrine-project.org/2009/06/19/cross-database-joins.html
我找到了我解释的解决方法 。本质上,Doctrine 默认剥离跨数据库外键,因为不是所有的数据库系统都支持它,但是你可以通过在 Doctrine 库中注释掉一些代码来禁用它。
我有两个表,db1.Contact 和 db2.Recipient。每个收件人都应该是一个联系人,所以我在 db1.Contact.ContactID 字段的两个表之间设置了一个外键。
我在 Recipient.php 中用以下注释表示:
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="\db1\Contact")
* @ORM\JoinColumn(name="ContactID", referencedColumnName="ContactID")
**/
private $Contact;
为此,我不需要 Contact.php 中的任何代码。
当我生成数据库时(使用 doctrine orm:schema-tool:create --dump-sql)我可以看到创建了 Recipient.ContactID 字段并为其提供了索引。但是,不会生成和执行任何查询来创建外键约束。所以要明确一点,我没有收到任何错误,但从未生成约束。
我该如何解决这个问题? doctrine 肯定支持跨库外键?我查看了注释文档并查看是否有创建工具的任何选项,但我看不到任何打开此功能的方法。
您的 ManyToOne
关联似乎有误。如果你的代码库是命名空间的,你应该使用实体的 FQCN(或者如果双方的实体位于同一目录中,则只使用类名), 而不是 table 名称 。
例如
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="YourNamespace\Entities\Contact")
* @ORM\JoinColumn(name="ContactID", referencedColumnName="ContactID")
**/
private $contact;
您可能想阅读有关关联映射的更多信息here。
Doctrine 不支持跨数据库 FK:
In Doctrine, joining data across databases is not technically “supported” by a designed feature, but you can make it work by tricking Doctrine a little bit.
来源:http://www.doctrine-project.org/2009/06/19/cross-database-joins.html
我找到了我解释的解决方法