I wish to narrow down quote search by using multiple Tags, unfortunately it returns no results when the search has more than a single Tag.
$search = $request->request->all()['quote_search'];
$queryBuilder = $this->createQueryBuilder('q');
if ($search['tagMode'] != -1 && !empty($search['tags']))
{
$queryBuilder->leftJoin('q.tags', 't');
if ($search['tagMode'] == 1000) {
$queryBuilder->setParameter("tags", $search['tags']);
$queryBuilder->andWhere("t.id IN (:tags)");
}
else if ($search['tagMode'] == 2000) {
$andExpr = $queryBuilder->expr()->andX();
foreach ($search['tags'] as $tagId) {
$andExpr->add($queryBuilder->expr()->eq("t.id", $tagId));
}
$queryBuilder->andWhere($andExpr);
}
}
$queryBuilder
->orderBy('q.id', 'ASC')
->setFirstResult($page * $limit)
->setMaxResults($limit)
;
Result formatted query:
SELECT
COUNT(*) AS dctrn_count
FROM
(
SELECT
DISTINCT id_0
FROM
(
SELECT
q0_.id AS id_0,
q0_.content AS content_1,
q0_.interpretation AS interpretation_2,
q0_.rating AS rating_3
FROM
quote q0_
LEFT JOIN quote_tag q2_ ON q0_.id = q2_.quote_id
LEFT JOIN tag t1_ ON t1_.id = q2_.tag_id
WHERE
t1_.id = 88
AND t1_.id = 306
ORDER BY
q0_.id ASC
) dctrn_result
) dctrn_table
Someone had a similar issue here but I was not able to find a way to adapt to mine. Thank you.