Я хочу изменить этот SQL-запрос: (я использую пакет) (Evenement - это сущность, а evenement_evenement - результат самоотнесения многих ко многим из событий)
SELECT *
FROM evenement e
natural JOIN evenement_evenement ee
WHERE e.id = ee.evenement_source
AND e.id = 3
В DQL. На данный момент у меня есть это:
public function findAllEventAssociateByEvent($idEvent){
$qb = $this->createQueryBuilder('e');
$qb->add('select', 'e');
$qb->from('Bundle:Evenement', 'e2');
$qb->where('e = :evenement');
$qb->andWhere('e2 in e.evenements');
$qb->setParameter('evenement', $idEvent);
return $qb;
//select * from evenement e NATURAL join evenement_evenement ee where e.id = ee.evenement_source and e.id = $idEvent
}
А у меня это:
$eventAssocies = $em->getRepository('Bundle:Evenement')->findAllEventAssociateByEvent($id)->getQuery()->getResult();
Но не работает, у меня ошибка в "andWhere", но я не знаю почему ...
Что означает «У меня ошибка»? Есть ли какое-нибудь сообщение об ошибке, которым вы забыли поделиться?
Да, я провел небольшое исследование, не помогло. И моя ошибка для этого кода: [Синтаксическая ошибка] строка 0, столбец 104: Ошибка: ожидаемая Doctrine \ ORM \ Query \ Lexer :: T_OPEN_PARENTHESIS, получено 'e'
не могли бы вы опубликовать свой класс сущности evenement?






Я думаю, что вы неправильно поняли некоторые вещи, я думаю, ваш запрос должен больше выглядеть так:
public function findAllEventAssociateByEvent($idEvent){
$qb = $this->createQueryBuilder('e')
->join('e.evenement_evenement', 'e2')
->where('e = :evenement')
->setParameter('evenement', $idEvent);
return $qb;
}
Присоединение сделает то, что вы пытались сделать со своим AndWhere, я полагаю
У меня есть этот запрос с вашим кодом «SELECT e FROM Bundle \ Entity \ Evenement e INNER JOIN e.evenement e2 WHERE e =: evenement», мне нужны оба условия: / И эта ошибка: [Семантическая ошибка] строка 0, столбец 69 рядом 'e2 WHERE e =': Ошибка: пакет класса \ Entity \ Evenement не имеет ассоциации с именем evenement
Я предположил, что у вас есть связанный объект, отображаемый полем с именем evenement, но вам нужно адаптироваться к вашей ситуации.
Использование join в соответствующем поле выполнит ваше второе условие ->join('e.relatingField, 'e2', 'WITH', 'e2.relatingField = id'), что в значительной степени то, что оно означает
Вы не можете использовать andWhere таким образом, вы должны относиться к нему так же, как вы относились к своему пункту where. Объявите параметр, а затем установите его. Насколько я понимаю, вам нужно использовать подзапрос для этой части e.evenements. Что бы вы ни ожидали в части e.evenements, извлеките ее в переменную, например, $evenements, и выполните следующие действия:
$qb->andWhere('e2 IN (:evenements)')
->setParameter('evenements', $evenements, Doctrine\DBAL\Connection::PARAM_INT_ARRAY);
Предполагая, что $evenements - это массив. Если это строка, вы можете, например, explode().
Если вы ищете быстрое решение, попробуйте следующее:
$qb = $this->createQueryBuilder('e')
->select('e.id')
->where('e.id = :evenement')
->setParameter('evenement', $idEvent);
$evenementsIds = $qb->getQuery()->getResult(); // This will get you an array of ID's
$qb2 = $this->createQueryBuilder('e2')
->where('e2.id IN (:evenements)')
->setParameter('evenements', $evenementsIds, Doctrine\DBAL\Connection::PARAM_INT_ARRAY);
$result = $qb2->getQuery()->getResult();
Что такое результат (что вы получаете) и что такое хороший результат (что вам нужно получить)? Пожалуйста, дважды проверьте, что у вас что-то есть в вашей базе данных. Попробуйте заново создать запрос с помощью клиента MySQL, чтобы увидеть, действительно ли вы запрашиваете с хорошими параметрами.
Я получаю 1 результат, но мне нужно 2 результата (мне нужно результаты в моей базе данных). Я получаю 2 результата в phpmyadmin с этим: select * from evenement e NATURAL join evenement_evenement ee, где e.id = ee.evenement_source и e.id = 1, где 1 - это идентификатор 1 события
В этом случае дважды проверьте свои параметры и записи в базе данных. Я старался изо всех сил с синтаксисом DQL, и, поскольку вы получили «кое-что», я думаю, что на ваш вопрос, связанный с ошибкой, есть ответ. Теперь, что происходит с вашими параметрами и результатами, я не могу вам ничего рассказать без более подробной информации.
В моей базе данных: evenement: id, date ... (с моей сущностью Evenement) evenement_evenement = evenement_origin, evenement_target (сгенерировано из entity Evenement с manytomany)
evenement и evenement_evenement - две таблицы в моей базе данных
Возможный дубликат SQL выполняет преобразование DQL