symfony - Поиск по нескольким тегам в ManyToMany
Есть две таблицы с m2m отношением + таблица связей (book -> book_mark <- mark). Я пытаюсь найти все книги, у которых есть заданный список тегов (например у Book1 есть [mark1, mark2, mark3], у Book2 есть [mark1, mark3], $searchList = [mark1, mark2]. Цель - получить Book1. Много всего перепробовал, долго гуглил, но найти готовое решение так и не смог - пошел писать велосипед. Получилось сначала так:
public function findAllByMarksList(array $marksList)
{
return $this->createQueryBuilder(b)
->select(b, m)
->leftJoin(b.marks_list, m)
->andWhere(:marks_list MEMBER OF b.marks_list)
->setParameter(marks_list, $marksList)
->getQuery()->getArrayResult();
}
Но этот код находит все книги, у которых есть хотя бы один указанный параметр, а не все.
Так, я решил что я полностью ошибаюсь, и пошел другим путем:
public function findAllByMarksList(array $marksList)
{
$qb = $this->createQueryBuilder(b)
->select(b, m)
->leftJoin(b.marks_list, m);
for ($i = 0; $i<count($marksList); $i++){
$qb->andWhere(m.id in (:mark.$i.))
->setParameter(mark.$i, $marksList[$i]);
}
return $qb->getQuery()->getArrayResult();
}
Здесь я столкнулся с новой проблемой - этот код проверяет только одну метку, и всегда возвращает пустой результат, если количество параметров больше одного
Я полностью сбит с толку, и не представляю, что делать Буду очень благодарен за любые идеи!
- 19
- 0
- 2 янв 2018 2018-01-02 13:49:26
- Егор Скороходов
Ответов пока нет