2

我有兩個實體實體1實體2與OneToMany關係,但他們住在兩個MySQL數據庫。Symfony and Doctrine:跨數據庫關係

我該如何在Symfony中實現與它們的關係?

是否可以創建兩個分離的bundle來實現這些實體?

回答

1

在學說中,跨數據庫加入數據在技術上並不是由設計特徵「支持」的,但你可以通過一點點欺騙學說來使其工作。

如果你想建立實體之間的關係,那麼他們必須使用相同的連接:同一個數據庫。

獲取多個數據庫工作的關鍵是在您的實體類中,您需要指定實體的表名,並且該表所屬的數據庫的名稱的前綴爲。下面是使用上的註釋的例子:

<?php 
namespace Demo\UserBundle\Entity; 

use DoctrineORMMapping as ORM; 

/** 
* Demo\UserBundle\Entity\User 
* 
* @ORMTable(name="users.User") 
*/ 
class User implements 
{ 
    /* ... */ 
} 

<?php 
namespace Demo\PostBundle\Entity; 

use DoctrineORMMapping as ORM; 

/** 
* Demo\PostBundle\Entity\Post 
* 
* @ORMTable(name="posts.Post") 
*/ 
class Post implements 
{ 
    /* ... */ 
} 

和關係表:

<?php 
namespace Demo\PostBundle\Entity; 

use DoctrineORMMapping as ORM; 

/** 
* Demo\PostBundle\Entity\Post 
* 
* @ORMTable(name="posts.Post") 
*/ 
class Post implements 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="\Demo\UserBundle\Entity\User") 
    **/ 
    private $user; 

    /* ... */ 

    /** 
    * Set user 
    * 
    * @param \Demo\UserBundle\Entity\Site $site 
    * @return Post 
    */ 
    public function setUser($user) 
    { 
     $this->user = $user; 

     return $this; 
    } 

    /** 
    * Get user 
    * 
    * @return \Demo\UserBundle\Entity\Site 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 
} 

Here關於它的文章。

希望這個幫助

+0

Grazie!我可以將該數據庫名稱字符串設置爲配置參數嗎?再見! – ShinDarth

+0

嗨@ShinDarth與學說註釋我認爲是不可能的插入參數,但你可以嘗試用XML註釋,並用%'%db_name_1%'把一個參數希望這可以幫助 – Matteo

+0

嗨@ShinDarth你試過我的解決方案嗎?它工作嗎? – Matteo