2

私はOneToMany関係を持つ2つのエンティティEntity1Entity2を持っているが、彼らは2つのMySQLデータベースに住んでいます。symfonyのとDoctrine:クロスデータベースリレーション

symfonyでそれらのエンティティを関係で実装するにはどうすればよいですか?

エンティティを実装する場所が2つに分かれたバンドルを作成することはできますか?

答えて

1

Doctrineでは、データベース間でデータを結合することは、技術的には設計された機能によって「サポート」されていませんが、Doctrineをちょっとトリックすることによって動作させることができます。

エンティティ間のリレーションシップを構築する場合は、同じ接続、つまり同じデータベースを使用する必要があります。

エンティティクラス内で複数のデータベースを稼働させるには、という名前の接頭辞を持つエンティティのテーブル名をと指定する必要があります。ここでは、アノテーションを使用した例です。

<?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

doctrineアノテーションを持つ@ShinDarth私は考えられるパラメータを挿入することはできませんが、xmlアノテーションを試して、 '%db_name_1%'でparamsを置くことができますこのヘルプ – Matteo

+0

hi @ ShinDarthあなたは私のソリューションを試しましたか?それは働いていますか? – Matteo