#xml #join #annotations #doctrine-orm #mapper
#xml #Присоединиться #примечания #доктрина-orm #картограф
Вопрос:
Я пытаюсь объединить две таблицы, но застрял в написании правильных XML-картографов (настройка и доступ к сущностям протестированы и работают нормально)
- Основано на MySQL, Doctrine 2.0.4 и ZF-1.11
- Я использую XmlDriver( ‘path to mappers);
Запрос
$query = $em->createQueryBuilder()
->select('u')
->from('EntitiesUsers', 'u')
->leftJoin('u.Addresses', 'a')
->getQuery();
$info = $query->getResult();
Картограф
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="EntitiesUsers" table="users">
<change-tracking-policy>DEFERRED_IMPLICIT</change-tracking-policy>
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="name" type="string" column="name"/>
<many-to-one field="street" target-entity="Addresses" />
</entity>
</doctrine-mapping>
Но со всеми возможными отношениями (я здесь устаю Я всегда сталкиваюсь с одной и той же проблемой: свойство связанного объекта не найдено:
Doctrine ORM Mapping MappingException — Property street не существует
Ответ №1:
Вы указали целевой объект для своего поля street, но вы должны предоставить обратное отображение в таблицу целевых объектов, в данном случае «Адреса». Используя XML-сопоставление Doctrine 2, это было бы:
<many-to-one field="street" target-entity="Addresses" inversed-by="id" />
Это предполагает, что столбец identity в вашей таблице addresses называется ‘id’.