簡體   English   中英

Doctrine不會生成跨數據庫外鍵

[英]Doctrine doesn't generate cross-database foreign keys

我在Doctrine中設置了一些模型,其中一些模型位於不同的數據庫中。 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;
}

重要的是, 保濕這些實體的工作完全正常 ,但架構工具根本不會生成外鍵。

有沒有人遇到過這個? 還有另一個SO帖子,但不幸的是沒有答案。

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;
}

現在,運行模式創建或更新將按預期創建外鍵。 這可能會產生其他意想不到的副作用,但我還沒有遇到任何副作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM