symfony - Поиск по нескольким тегам в ManyToMany


0

Есть две таблицы с 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

Ответов пока нет