Symfony-如何在条令请求中使用LIKE和COALECE



我在Doctrine请求中遇到了LIKE和COALESCE问题(不能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();
}

它返回公司的所有用户";企业;其中";过滤器名称"匹配(如果不为空(与";name";数据库中。(如果"filtre_name"为null,那么由于COALESCE,所有数据库的where匹配(。

我现在想做同样的事情,但用";"喜欢";而不是"="因为现在这个名字必须完全匹配,我想要一个匹配";abc";只有";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();
}

结果是一个错误:";警告:未定义的属性:Doctrine\ORM\Query\AST\CoalesceExpression::$type"。

我找到了一个解决方案。只有当参数不为Null时,我才使用参数构建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();
}

最新更新