Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 教条没有';t生成跨数据库外键_Php_Mysql_Doctrine Orm - Fatal编程技术网

Php 教条没有';t生成跨数据库外键

Php 教条没有';t生成跨数据库外键,php,mysql,doctrine-orm,Php,Mysql,Doctrine Orm,我在条令中设置了一系列模型,其中一些模型位于不同的数据库中Doctrine的模式生成工具似乎正在生成数据库间外键,但不会生成跨数据库外键。 例如: /** * @ORM\Entity * @ORM\Table(name="db1.Contact") **/ class Contact { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue **/

我在条令中设置了一系列模型,其中一些模型位于不同的数据库中Doctrine的模式生成工具似乎正在生成数据库间外键,但不会生成跨数据库外键。

例如:

/**
 * @ORM\Entity
 * @ORM\Table(name="db1.Contact")
 **/
class Contact {
    /** 
     * @ORM\Id 
     * @ORM\Column(type="integer") 
     * @ORM\GeneratedValue 
     **/
    private $id;
}

/**
 * @ORM\Entity
 * @ORM\Table(name="db2.Subscription")
 **/
class Subscription {
    /** 
     * @ORM\Id 
     * @ORM\Column(type="integer") 
     * @ORM\GeneratedValue 
     **/
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Contact")
     * @ORM\JoinColumn(name="contact_id", referencedColumnName="id")
     */
    private $contact;
}
关键的是,将这些实体水合完全可以,但是模式工具根本不生成外键


以前有人碰到过这个吗?但不幸的是,还有另一个问题没有得到回答。

原则不支持跨数据库外键,但是可以修改它来实现这一点。图书馆似乎采取了“不是每个人都能支持它,所以没有人应该支持”的方法。此实例适用于MySQL

生成架构时,使用
RemoveNamespacedAssets
visitor运行预步骤。这将删除对您正在生成的类之外的任何类的所有引用

在该类的
acceptForeignKey
函数中,注释以下代码:

// The table may already be deleted in a previous
// RemoveNamespacedAssets#acceptTable call. Removing Foreign keys that
// point to nowhere.
if ( ! $this->schema->hasTable($fkConstraint->getForeignTableName())) {
    $localTable->removeForeignKey($fkConstraint->getName());
    return;
}

运行架构创建或更新将按预期创建外键。这可能会有其他意想不到的副作用,但我还没有遇到任何副作用。

理论似乎不支持它。参见上一个主题:我设法解决了它。请参阅下文。您的所有数据库都需要位于同一台mysql服务器上。Mysql不会跨多个数据库服务器进行查询。当然,您正在将数据库名称硬编码到实体映射中。但是如果这些限制都不影响应用程序,那么它应该可以正常工作。是的,这就是我的情况——多个数据库但在同一台服务器上。我同意,将数据库名称硬编码到映射中是非常糟糕的。实际上我只是想把所有的东西移到一个数据库中,但这是一个快速修复!在对您所说的行进行注释之后,更新工具会告诉我“模式中没有名为“db1.Contact”的表”。为了让它发挥作用,我不得不发表评论。我希望它不会损坏任何东西。。。