【发布时间】:2011-12-29 16:24:46
【问题描述】:
我的 Symfony2 框架中有 2 个捆绑包: 一个带有用户实体的“MainBundle”,以及一个带有我所有用于问题跟踪系统的东西的“TicketBundle”。在这种情况下,只有实体“Pool”和“Mappingpooluser”是重要的。 他们都使用不同的实体管理器,因为我必须使用 2 个不同的数据库。 (见下面我的 config.yml)
doctrine:
dbal:
default_connection: default
connections:
default:
[driver, host etc.]
dbname: m_symfony
ticket:
[driver, host etc.]
dbname: m_ticketbundle
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
XXXMainBundle: ~
ticket:
connection: ticket
mappings:
XXXTicketBundle: ~
XXXMainBundle: ~
现在我有一个实体 (Mappingpooluser),它需要 MainBundle 的一个实体(用户)和 TicketBundle 的一个实体(池)(以及一些不重要的东西):
/**
* XXX\TicketBundle\Entity\Mappingpooluser
*
* @ORM\Table(name="MappingPoolUser")
* @ORM\Entity(repositoryClass="XXX\TicketBundle\Repository\MappingPoolUserRepository")
*/
class Mappingpooluser
{
/**
* @var integer $poolid
*
* @ORM\OneToOne(targetEntity="Pool")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*/
private $pool;
/**
* @var integer $userid
*
* @ORM\OneToOne(targetEntity="XXX\MainBundle\Entity\User")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*/
private $user;
[getter/setter and this stuff]
到目前为止一切正常:) 我可以通过
获取控制器中的 Mappingpooluser 实体 $em = $this->getDoctrine()->getEntityManager("ticket");
$entities = $em->getRepository('XXXTicketBundle:Mappingpooluser')->findAll();
如果我调用 $entities[0]->getPool()->getId() 我将得到池的正确 ID(如前所述:池与 Mappingpooluser 位于同一个 Bundle 中),但如果我调用 $entities [0]->getUser()->getId() 我会报错:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'm_ticketbundle.User' doesn't exist
这是正确的,因为 User 表在另一个 DB (m_symfony) 中。
长话短说 问题:如何让 Symfony2 将票证实体管理器用于池和用户的默认实体管理器??
【问题讨论】:
标签: doctrine symfony bundle entitymanager