Symfony-2.1 と Doctrine-2.3 を使用。複数のデータベースがあり、クロスデータベース結合を行う必要があるため、次の提案に従いました。
複数の接続と 1 つのエンティティ マネージャーをセットアップします。ここにあるapp/config/config.yml
:
doctrine:
dbal:
default_connection: db1
connections:
db1:
driver: pdo_mysql
host: 127.0.0.1
dbname: db1
db2:
driver: pdo_mysql
host: 127.0.0.1
dbname: db2
orm:
default_entity_manager: default
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
auto_mapping: true
mappings:
FirstBundle:
type: annotation
dir: Model
prefix: NoiseLabs\FirstBundle\Model
SecondBundle:
type: annotation
dir: Model
prefix: NoiseLabs\SecondBundle\Model
のエンティティ クラスFirstBundle
:
namespace NoiseLabs\FirstBundle\Model;
/**
* @ORM\Entity
* @ORM\Table(name="db1.table1")
*/
class FirstEntity
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
}
のエンティティ クラスSecondBundle
:
namespace NoiseLabs\SecondBundle\Model;
/**
* @ORM\Entity
* @ORM\Table(name="db2.table2")
*/
class SecondEntity
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="NoiseLabs\FirstBundle\Model\FirstEntity")
* @ORM\JoinColumn(name="firstId", referencedColumnName="id", onDelete="CASCADE")
*/
protected $first;
}
現在、問題はapp/console doctrine:schema:update --dump-sql
(デフォルト接続) のスキーマ変更のみを検出するdb1.tables
ことです。デフォルトの接続をに設定すると、にdb2
関連するSQLのみが出力されdb2.tables
ます。
確認したapp/console doctrine:mapping:info
ところ、すべてのエンティティ クラスがマップされています。
これは Doctrine/Symfony の制限ですか、それとも設定を調整する必要がありますか? ありがとう。