我想创建一个查询来评估更精确的搜索词,例如搜索“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 中没有 INSTR 函数,这就是为什么会出现此错误 see docs
相反,您可以制作 NativeQuery see docs
像这样
$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addEntityResult('City', 'c');
// for every selected field you should do this
$rsm->addFieldResult('c', 'id', 'id');
$rsm->addFieldResult('c', 'name', 'name');
$em = $this->getEntityManager()
->createNativeQuery('
SELECT
id, name
FROM cities WHERE city LIKE '%:city%'
ORDER BY INSTR(city, ':city'), city',
$rsm
)->setParameter('city', $city);
return $em->getResult();
关于php - 优先考虑存储库中的 MySQL SELECT/LIKE 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275174/