Symfony2 + Doctrine: извлекает информацию из двух сущностей, связанных без переменной-члена.Собственный запрос sql?=> Ошибка Hydration / ObjectHydrator - PullRequest
0 голосов
/ 02 февраля 2012

Я хочу сделать что-то подобное в Doctrine SQL ...

SELECT N.id as n_id, C.id as c_id, T.id as t_id, C.author_id, C.body as comment FROM `news` N 
LEFT JOIN thread T on T.id = N.id
LEFT JOIN comment C on C.thread_id = T.id
WHERE 1

Итак, я сделал это:

    $rsm = new ResultSetMapping;
    $rsm->addEntityResult('App\MyBundle\Entity\News', 'N');
    $cols = array ('id', 'title','date');
    foreach ($cols as $key => $col) {
        $rsm->addFieldResult('N', $col, $col);
    }
    // thread
    $rsm->addJoinedEntityResult('App\MyBundle\Entity\Thread' , 'T', 'N', 'thread');
    $rsm->addFieldResult('T', 't_id', 'id');

    $sql = 'SELECT N.id, N.title, N.date, T.id AS t_id FROM news N ' .
    'LEFT JOIN thread T ON T.id = N.id WHERE N.id = 1';
    $query = $this->_em->createNativeQuery($sql, $rsm);

Но у меня есть ошибка:

    Notice: Undefined index: thread in /vendor/doctrine/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php line 85       

Я хочу уточнить, что между этими двумя сущностями нет связи между членами.

Есть идеи, пожалуйста?

Спасибо за все

Увидимся

Сэм

1 Ответ

2 голосов
/ 02 февраля 2012

Согласно документам:

Четвертый и последний параметр - это имя поля в результате родительской сущности, которое должно содержать результат присоединенной сущности.

ref: http://www.doctrine -project.org / docs / orm / 2.1 / en / reference / native-sql.html # Join-Entity-Results

Вы, возможно, пропустили, чтобы определить1012 * свойство в News классе, которое получит вашу присоединенную сущность.

...