2015-11-26 5 views
-1

У меня есть 3 таблицы: экзамен, поле и данные.doctrine join with condition

Отношения являются:

экзамен поле manyToMany; field oneToMany данные; ЭКЗАМЕН oneToMany данные

мне нужно указать FIELD_ID И в exam_id, чтобы получить необходимые данные В SQL я это сделать:

SELECT * FROM exam 
LEFT JOIN field ON exam.id = field.exam_id 
LEFT JOIN data ON field.id = data.field_id AND (data.exam = exam.id) 

Это работает

В Учении:

$this->_em->getRepository('FwFollowBundle:Exam') 
     ->createQueryBuilder('exam') 
->leftJoin('exam.field', 'field') 
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam') 
->select ('exam', 'field', 'data') 

Результат не фильтруется условием «WITH».

Я хочу, чтобы вернуть все экзамены с их полями и, если они есть, их данные

Я кто-то знают, почему. Thx

EDIT 1: Я сделал некоторые дамп, чтобы попытаться нашел проблему. В моем проекте у меня есть шаг между экзаменом и полем. Я делаю это

$this->_em->getRepository('FwFollowBundle:Exam') 
->createQueryBuilder('exam') 
->leftJoin('exam.score', 'score') 
->leftJoin('score.fields', 'field') 
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam') 
->select ('exam', 'score', 'field', 'data') 

Для 2 экзаменов у меня есть одни и те же результаты, так что один и то же поле. У меня только различия с данными. Это тот же экземпляр объекта Field для двух экзаменов. Вот почему у меня нет требуемых данных.

ответ

2

Попробуйте так:

return $this->_em->getRepository('FwFollowBundle:Exam') 
    ->createQueryBuilder('exam') 
    ->leftJoin('exam.field', 'field') 
    ->leftJoin('field.data', 'data') 
    ->where('data.exam = :exam') 
    ->setParameter('exam', 'exam.id') 
    ->getQuery() 
    ->getResult() 
; 
+0

Thx, но с вашим запросом я не имею ничего взамен – lala

+0

Мой ответ был коротким sorry.With вашего запроса, только экзамен с данными был возвратом. Мне нужно вернуть все экзамены с их полями и, если они есть, данные – lala

0

Вы должны выбрать объекты, которые вы хотите быть увлажненными, иначе при вызове $ рассмота> ПолучитьПолеЗаголовок() - GetData доктрина>() будет ленивые нагрузки все с не критерии.

я повторно написать что-то вроде запроса:

$exam = $this->_em->createQueryBuilder() 
->select('exam', 'field', 'data') 
->from('FwFollowBundle:Exam', 'exam') 
->leftJoin('exam.field', 'field') 
->leftJoin('field.data', 'data', 'WITH', 'data.exam = exam') 
->getQuery() 
->getResult(); 
+0

Мой запрос не был завершен, у меня есть условие select, чтобы увлажнить отношение. – lala