Что вызывает ожидаемую буквальную ошибку? - PullRequest
0 голосов
/ 12 марта 2020

У меня запрос с синтаксической ошибкой. Это ошибка!

string (63) "[Синтаксическая ошибка], строка 0, столбец 57: ошибка: ожидаемый литерал, получено 'd'"

public function getDomain(string $country)
{
    try {
        return $this->createQueryBuilder('d')
            ->where(':country NOT IN (d.blocked_countries)')
            ->setParameter('country', $country)
            ->setMaxResults(1)
            ->getQuery()
            ->getSingleResult()
            ;
    } catch (\Exception $exception) {
        return $exception->getMessage();
    }
}

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Спасибо, я сделал это так, потому что -> setParameter безопаснее

    {
        try {
            return  $this->createQueryBuilder('d')
                ->where('d.blocked_countries NOT LIKE :code')
                ->setParameter('code', "%$code%")
                ->setMaxResults(1)
                ->getQuery()
                ->getOneOrNullResult()
            ;
        } catch (\Exception $exception) {
            return null;
        }
    }
0 голосов
/ 12 марта 2020

Мы не можем применить оператор IN для этого случая, потому что doctrine сохраняет array type в виде строки с php serialize(). Так что вы можете сделать что-то вроде этого

        $qb = $this->createQueryBuilder('d');
        $qb
            ->where(
                $qb->expr()->like('d.blocked_countries', "'%$country%'")
            )
            ->setMaxResults(1)
            ->getQuery()
            ->getOneOrNullResult()
        ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...