Я знаю, что это старый вопрос, но если кто-то еще приходит сюда через Google (как я), мне пришлось отказаться от findBy и использовать DQL в репозитории:
$products = $em->getRepository('Vendor\Bundle\Entity\Product')->findByColours($colours);
И вхранилище:
public function findByColours($colours)
{
$qb = $this->getEntityManager()->createQueryBuilder();
$qb ->select(array('p'))
->from('VendorBundle:Product', 'p')
->join('p.colours', 'c', 'WITH', $qb->expr()->in('c.id', $colours));
$result = $qb->getQuery()->execute();
return $result;
}
Возможно, вам потребуется изменить объединение в зависимости от значения $ colors.Предполагается, что это массив идентификаторов цветов.Если это строка, вы можете отказаться от in()
или если это массив строк, вам необходимо связать строки как параметры (см. Следующую ссылку).Разъяснение по expr () и тому подобное есть в Doctrine docs
Я не знаю, почему Undefined index: joinColumns
происходит, но это метод, чтобы вообще обойти его.Надеемся, что кто-то может прояснить эту ошибку, поскольку мое решение добавляет дополнительную работу в отношение «многие ко многим».