我想在包含两个模块的ZF2应用程序中使用Doctrine 2,每个模块都有自己的数据库。我需要使用跨数据库连接,以便我可以将一个模块中的实体与另一个模块中的实体相关联。 Here's a UML diagram的设置。ReflectionException在从不同数据库的Doctrine映射实体时引发
我在我的第一个实体使用这种尝试(我已经去除了无关紧要的参数和use
语句):
namespace Client\Entity;
/**
* A website.
*
* @ORM\Entity
* @ORM\Table(name="users.website")
* ...
* @property $server
*/
class Website extends BaseEntity {
// Other class vars ...
/**
* @ORM\ManyToOne(targetEntity="Server\Entity\Server", inversedBy="websites")
* @ORM\JoinColumn(name="server_id", referencedColumnName="id")
*/
protected $server;
而这在我的服务器实体:
namespace Server\Entity;
/**
* A server.
*
* @ORM\Entity
* @ORM\Table(name="servers.server")
* ...
* @property $websites
*/
class Server extends BaseEntity {
// Other class vars ...
/**
* @ORM\OneToMany(targetEntity="Client\Entity\Website", mappedBy="server")
*/
protected $websites;
这种映射作品完全当我创建一个新的网站实体时(通过使用DoctrineModule\Form\Element\ObjectSelect
作为服务器关联的网络表单),但是当我去编辑现有网站时,抛出此ReflectionException:
类Server \实体\网站不存在
完整的堆栈跟踪can be found here。出于某种原因,当服务器实体通过与网站实体的关联进行访问时,它认为所有实体都存在于Server\Entity
命名空间中,而不是Client\Entity
。我需要做些什么来确保Server实体在正确的模块名称空间中查找?
的CLI命令orm:info
生产:
Found 7 mapped entities:
[OK] Server\Entity\Server
[OK] Client\Entity\Role
[OK] Client\Entity\Website
[OK] Client\Entity\User
[OK] Client\Entity\Client
[OK] Client\Entity\Permission
[OK] Message\Entity\Notification
但orm:validate-schema
结果:
[Mapping] OK - The mapping files are correct.
[Database] FAIL - The database schema is not in sync with the current mapping file.
我有这个在我模块的module.config.php
每一个:
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
)
)
)
'orm:schema-tool:update --dump-sql'会产生什么?另外:考虑到DBAL模式工具每次都在单个数据库上进行自省,所以这可能是这里的问题(已知的) – Ocramius 2013-02-21 10:39:52
@Ocramius http://pastebin.com/DrtLHqsN。与之前尝试创建'users.'时存在于'servers.'数据库之前的内容稍有不同。'数据库 – hohner 2013-02-21 10:48:59
@Ocramius我也用'orm:schema'成功更新了我的模式-tool:update --force',但是'validate-schema'仍然返回相同的数据库失败消息 – hohner 2013-02-21 10:56:53