Количество связанных переменных не соответствует количеству токенов с построителем запросов

У меня есть следующий запрос:

...
$now = new \DateTime('now');
$now->setTime($now->format('H'), 0, 0);

$shopsQueryBuilder = $this->createQueryBuilder('shops')
->select('shops.id, shops.fullname, shops.username')
->leftJoin('shops.owner', 'owner')
->leftJoin('owner.location', 'location')
->leftJoin('location.city', 'city')
->leftJoin('city.state', 'state')
->leftJoin('state.province', 'province')
->where('shops.expirydate >= :expiryDate')
->setParameter('expiryDate', $now);

if ($provinceId)
{
$shopsQueryBuilder->where('province = :province')
->setParameter('province', $provinceId);
}

if ($stateId)
{
$shopsQueryBuilder->andWhere('state = :state')
->setParameter('state', $stateId);
}

if ($cityId)
{
$shopsQueryBuilder->andWhere('city = :city')
->setParameter('city', $cityId);
}
...

Интересно, почему я продолжаю получать ошибку:

Количество связанных переменных не соответствует количеству токенов с построителем запросов

Любая идея?

0

Решение

Вы должны использовать andWhere Вот:

      if ($provinceId)
{
$shopsQueryBuilder->andWhere('province = :province')
->setParameter('province', $provinceId);
}

В противном случае вы заменяете where пункт для shops.expiryDate, а не добавление к нему. И у него все еще есть параметр для этого поля.

2

Другие решения

может быть, вам нужно установить владельцев собственности и использовать метод andWhere, что-то вроде этого:

...
$shopsQueryBuilder
->andWhere('city.province = :province')
->setParameter('province', $provinceId);
...
0

По вопросам рекламы [email protected]