使用Symfony-2.1和Doctrine-2.3。我有多个数据库,需要进行跨数据库连接,所以我按照以下建议进行操作:
并设置多个连接和一个实体管理器。这是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
,则只会输出与db2.tables
相关的sql。
我已经使用app/console doctrine:mapping:info
进行了检查,并且正在映射所有实体类。
这是Doctrine / Symfony的限制还是我需要调整配置?感谢。
答案 0 :(得分:0)
每个实体经理只能有一个连接。将默认实体管理器拆分为两个。 app/console doctrine:schema:update
使用可选参数(em
)来指定正在使用的实体管理器。你必须运行两次:
app/console doctrine:schema:update --dump-sql em="default"
app/console doctrine:schema:update --dump-sql em="my_second_em"
Symfony2食谱中还有一篇短文(How to work with Multiple Entity Managers and Connections),值得一读。