是什么导致了预期的字面错误?

What is causing the expected literal error?

我有一个语法错误的查询。这是错误!

string(63) "[Syntax Error] line 0, col 57: Error: Expected Literal, got '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();
    }
}

我们不能在这种情况下应用 IN 运算符,因为学说将 array type 存储为字符串,其中 php serialize()。所以你可以这样做

        $qb = $this->createQueryBuilder('d');
        $qb
            ->where(
                $qb->expr()->like('d.blocked_countries', "'%$country%'")
            )
            ->setMaxResults(1)
            ->getQuery()
            ->getOneOrNullResult()
        ;

谢谢,我这样做是因为 -> 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;
        }
    }