我正在尝试在包含两个模块的 ZF2 应用程序中使用 Doctrine 2,每个模块都有自己的数据库。我需要使用跨数据库连接,以便将一个模块中的实体与另一个模块中的实体相关联。这是设置的 UML 图。
我已经尝试在我的第一个实体中使用它(我已经删除了不相关的参数和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
用于服务器关联的 Web 表单)时,这个映射完美地工作,但是当我去编辑一个现有的网站时,这个 ReflectionException 被抛出:
类 Server\Entity\Website 不存在
完整的堆栈跟踪可以在这里找到。出于某种原因,当通过与网站实体的关联访问服务器实体时,它认为所有实体都存在于Server\Entity
命名空间中,而不是Client\Entity
. 我需要做什么来确保服务器实体在正确的模块命名空间中查找?
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'
)
)
)