我有一些麻烦与喜欢和凝聚在一个学说的要求(不是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”。
1条答案
按热度按时间vd8tlhqk1#
我已经找到了一个解决方案。我建立我的queryBuilder与参数只有当他们不是空的。所以我删除COALESCE,现在我可以使用LIKE。