Doctrine不会生成跨数据库外键

时间:2015-05-12 14:27:28

标签: php mysql doctrine-orm

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

例如:

When(/^I tap on the play button$/) do
    expect(page).to have_selector('.playback', visible: false)
    page.all('.playback').click_link

重要的是,保护这些实体可以完全正常,但架构工具根本不会生成外键。

有没有人遇到过这个?还有另一个SO post但遗憾的是没有答案。

1 个答案:

答案 0 :(得分:7)

Doctrine不支持跨数据库外键,但可以对其进行修改。图书馆似乎需要一个"不是每个人都可以支持它,所以没有人应该"做法。这个实例适用于MySQL。

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

在该类的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;
}

现在,运行模式创建或更新将按预期创建外键。这可能会产生其他意想不到的副作用,但我还没有碰到任何副作用。