Я пытаюсь использовать Doctrine 2 в приложении ZF2, которое содержит два модуля, каждый со своей собственной базой данных. Мне нужно использовать соединения между базами данных, чтобы я мог связать сущности из одного модуля с сущностями в другом. Вот схема 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
для ассоциации с сервером), но когда я перехожу к редактированию существующего веб-сайта, возникает это исключение 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'
)
)
)
orm:schema-tool:update --dump-sql
? Также: учтите, что инструменты схемы DBAL выполняют самоанализ в одной базе данных за раз, так что это может быть проблемой здесь (известная) - person Ocramius   schedule 21.02.2013users.
, в базу данныхservers.
. - person hohner   schedule 21.02.2013orm:schema-tool:update --force
, ноvalidate-schema
все еще возвращает то же сообщение об ошибке базы данных. - person hohner   schedule 21.02.2013orm:generate-proxies
такое же исключение? - person Ocramius   schedule 21.02.2013orm:generate-proxies
показывает ту же ошибку. Что вы подразумеваете под конфигурацией отображения? Где это найти - в Module.php? Я подумал, что это может быть потому, что я динамически создавал EntityManagers в своем BaseController (с пользовательскими массивами соединений), которые я описал здесь. Но я создаю экземпляр для каждого модуля и все еще испытываю ту же проблему. - person hohner   schedule 21.02.2013$em->getMetadataFactory()
для проверки драйверов? - person Ocramius   schedule 21.02.2013module.config.php
моего модуля. - person hohner   schedule 21.02.2013