我想要創建一個查詢更精確的搜索條件的查詢,例如,搜索「埃森」應返回Essen
目前它返回Evessen
,因爲這也是一個有效的值。將MySQL SELECT/LIKE優先級存儲在存儲庫中
我目前的功能:
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的數量有限函數:http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-functions。 instr不是其中之一。你將不得不添加你自己的用戶定義函數或使用其中的一個dql包。 http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html或者,正如@DenisAlimox所建議的那樣,使用本機查詢。 – Cerad