Symfony 存储库区分大小写问题

Symfony repository case sensitivity Issue

我想在数据库中搜索客户的名字、姓氏和公司名称,但是没有结果。这可能是什么原因?我做了 '%'.$search.'%' 但结果是空白。我认为它区分大小写。我该如何解决?

存储库:

public function search(string $search)
    {
        $search = trim($search);
        if (!$search) {
            return null;
        }

        $query = $this->createQueryBuilder('customers');

        return $query->where('customers.name LIKE :search OR customers.lastname LIKE :search OR customers.company_name LIKE :search')
            ->setParameter('search', '%'.$search.'%')
            ->getQuery()
            ->getResult();

    }
Name : Berkay
Lastname : Cooke

Working Get : /customerSearch?q=Berkay - erkay - erk
Not Working Get : /customerSearch?q=berkay

Symfony Doctrine 没有关键字来匹配不区分大小写的模式。作为解决方法,您可以尝试这个(未测试):

public function search(string $search)
{
    $search = strtolower(trim($search));
    if (!$search) {
        return null;
    }

    $query = $this->createQueryBuilder('customers');

    return $query
        ->where('
            LOWER(customers.name) LIKE :search OR
            LOWER(customers.lastname) LIKE :search OR
            LOWER(customers.company_name) LIKE :search
        ')
         ->setParameter('search', '%'.$search.'%')
         ->getQuery()
         ->getResult();
}

请注意两个重要变化:

  • 使用函数strtolower()开头的函数;
  • 在查询中使用 DQL 关键字 LOWER