#symfony #doctrine-orm
#symfony #doctrine-orm
Вопрос:
У меня есть два объекта: сотрудник и реализация
В реализации объекта у нас есть атрибут employe и тип. Теперь я хочу выбрать некоторых сотрудников, которые сделали некоторые реализации.
$sql = "SELECT DISTINCT e FROM MonBundle:Employe e WHERE e IN ( SELECT DISTINCT r.employe FROM MonBundle:Realisation r WHERE
r.type = :type)";
$query = $em->createQuery($sql);
$query->setParameter("type",$type);
==> Ошибка: неверное выражение пути. Должно быть выражение statefieldpath
Комментарии:
1. почему не просто
SELECT DISTINCT r.employe FROM MonBundle:Realisation r WHERE r.type = :type
?2. Недопустимое выражение пути. Должно быть выражение statefieldpath.
Ответ №1:
Привет, связь между вашим сотрудником и реализацией должна быть двунаправленной «один к одному» или двунаправленной «один ко многим»
вы можете увидеть, как это работает здесь http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-one-bidirectional
благодаря этому вы можете получить доступ ко всем связанным данным вашего объекта
Затем вы можете использовать СОЕДИНЕНИЕ в своем запросе, чтобы связать вашего сотрудника с одной или несколькими реализациями (зависит от типа отношения между вашими 2 объектами) и сделать что-то вроде
SELECT DISTINCT e
FROM MonBundle:Employe e
JOIN e.realisation r
WHERE r.type = :type
чтобы получить список сотрудников, у которых есть реализация с типом = ?
Комментарии:
1. в объекте employee нет поля с именем realisation
2. @krome Добро пожаловать в stack overflow; пожалуйста, имейте в виду, что это может помочь дать объяснение в вашем ответе о том, что
JOIN
и как это работает, поскольку это может помочь задавшему вопрос более эффективно применять его, а также поможет будущим посетителям веб-сайта, которые могут не понимать, что этоJOIN
делает изтолько код в вашем ответе.3. Большое вам спасибо