【发布时间】:2016-05-17 11:44:11
【问题描述】:
我想创建一个查询更精确的搜索词,例如搜索“Essen”应该返回Essen,目前它返回Evessen,因为这也是一个有效值。
我目前的功能:
public function findCities($city){
$qb = $this->createQueryBuilder('z');
$qb
->select('z')
->where($qb->expr()->like('z.city', ':city'))
->orderBy('z.code')
->setParameter('city', '%'.$city . '%');
return $qb->getQuery()->getResult();
}
根据THIS 的建议,我创建了一个存储库函数:
public function findCities($city){
$qb = $this->createQueryBuilder('z');
$qb
->select('z')
->where($qb->expr()->like('z.city', ':city'))
->orderBy('INSTR(z.city, '.$city.'), z.city')
->setParameter('city', '%'.$city . '%');
return $qb->getQuery()->getResult();
}
不幸的是它返回[Syntax Error] line 0, col 70: Error: Expected known function, got 'INSTR'
任何其他方法(不返回数组,因为如果输出是数组,则需要大量更改的函数,我想避免这种情况)也许?
【问题讨论】:
-
DQL 仅支持有限数量的 sql 函数:doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/…。 instr 不是其中之一。您必须添加自己的用户定义函数或使用其中一个 dql 包。 symfony.com/doc/current/cookbook/doctrine/… 或者,正如 @DenisAlimox 所建议的,使用本机查询。
标签: php mysql symfony doctrine