У меня есть два объекта, назовем их «Девушка» и «Особенность». Сущность «Девушка» находится в ненаправленном отношении ManyToMany с «Особенностью».Запрос Doctrine2 (Builder) теряет отношения после использования фразы «где» и «в»
У меня есть страница с простой формой поиска. Я хочу найти Девушек по характеристикам. То, что я получаю после отправки формы на стороне сервера, - это список идентификаторов функций, и я должен вернуть список девочек, которые выбрали функции, перечисленные со всеми другими функциями, у этой девушки есть.
Давайте посмотрим на это: ╔════════════╦═══════════════╦═══════════════╦═══════════════╗ ║ ║ (1) Feature 1 ║ (2) Feature 2 ║ (3) Feature 3 ║ ╠════════════╬═══════════════╬═══════════════╬═══════════════╣ ║ (1) Girl 1 ║ Yes ║ Yes ║ No ║ ║ (2) Girl 2 ║ Yes ║ No ║ Yes ║ ╚════════════╩═══════════════╩═══════════════╩═══════════════╝
Числа в скобках являются предприятия идентификатор.
Что я делаю в первый является:
$qbd = $this->getQbd('AppBundle:Girl', 'g')
->select('g, gf')
->leftJoin('g.features', 'gf');
После получения данных (особенности идентификаторы) из URL (becausce метод формы использования GET) и положить их в $ имеется массив, я выполняю что-то вроде этого:
if (!empty($features)) {
$qbd->where(
$qbd->expr()->in('gf.id', ':features')
)->setParameter('features', $features);
}
Простой, насколько это возможно.
Все в порядке. Почти.
Когда я пытаюсь выполнить поиск девушек с характеристиками id равными 2 и 3, я получаю в результате обе Девушки (что хорошо). К сожалению, каждый из них имеет только функцию 2 и 3 (для этого случая, когда я пытаюсь выполнить для каждой из них $ girl-> getFeatures()), даже если оба они также должны содержать ссылку на функцию 1.
Что я делаю неправильно? Я уже пытался создавать другие, более сложные запросы для этого случая, но с каждым из них в конце я получил ту же проблему.