Symfony -如何在Doctrine请求中使用带有COALESCE的LIKE?

fhity93d  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(140)

我有一些麻烦与喜欢和凝聚在一个学说的要求(不是100%肯定的麻烦是存在的)。
我想在一个数据库中搜索一个过滤器,该过滤器仅在存在时匹配,并且仅使用值的一部分(例如,使用设置为“ab”的过滤器查找“abc”)。
此请求可以正常工作:

public function findUsers($entreprise, $filtres)
{
    $filtre_name = $filtres['name'];

    return $this->createQueryBuilder('users')
        ->where('users.entreprise = :entreprise')
        ->andWhere('users.name = COALESCE(:filtre_name, users.name)')
        ->setParameter('entreprise', $entreprise)
        ->setParameter('filtre_name', $filtre_name)
        ->orderBy('users.name', 'ASC')
        ->getQuery()
        ->getResult();
}

它返回公司“entreprise”的所有用户,其中“filtre_name”与数据库中的“name”匹配(如果不为空)。(如果“filtre_name”为空,则由于COALESCE,所有数据库的where匹配)。
我现在想做同样的事情,但用“LIKE”代替“=”,因为现在名称必须完全匹配,例如,我想在过滤器内只匹配“ab”。

public function findUsers($entreprise, $filtres)
{
    $filtre_name = $filtres['name'];

    return $this->createQueryBuilder('users')
        ->where('users.entreprise = :entreprise')
        ->andWhere('users.name LIKE COALESCE(:filtre_name, users.name)')
        ->setParameter('entreprise', $entreprise)
        ->setParameter('filtre_name', '%'.$filtre_name.'%')
        ->orderBy('users.name', 'ASC')
        ->getQuery()
        ->getResult();
}

结果是一个错误:“警告:未定义的属性:规则\ORM\查询\AST\联合表达式::$type”。

vd8tlhqk

vd8tlhqk1#

我已经找到了一个解决方案。我建立我的queryBuilder与参数只有当他们不是空的。所以我删除COALESCE,现在我可以使用LIKE。

public function findUsers($entreprise, $filtres)
{        
    $filtre_nom = $filtres['nom'];
    $filtre_gestionnaire = $filtres['gestionnaire'];

    $qb = $this ->createQueryBuilder('users');
    $qb ->where('users.entreprise = :entreprise')
        ->setParameter('entreprise', $entreprise);
    
    if ($filtre_nom != Null) {
        $qb ->andWhere('users.nom LIKE :filtre_nom')
            ->setParameter('filtre_nom', '%'.$filtre_nom.'%');
    }
    if ($filtre_gestionnaire != Null) {
        $qb ->andWhere('users.gestionnaire LIKE :filtre_gestionnaire')
            ->setParameter('filtre_gestionnaire', '%'.$filtre_gestionnaire.'%');
    }
        
    $qb->addorderBy('users.nom', 'ASC');         

    return $qb  ->getQuery()
                ->getResult();
}

相关问题