より正確な検索語句を検索するクエリを作成したいとします。 "Essen"の検索はEssen
を返すべきですが、これは有効な値でもあるのでEvessen
を返します。MySQL SELECT/LIKEをリポジトリに優先順位付けする
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'
その他のアプローチを(返す:
私の現在の機能:私はリポジトリ機能を作成しTHISアドバイスに基づいて
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();
}
出力が配列の場合は重い変更を必要とする関数があるので、私はそれを避けたいでしょう)?あなたが作ることができる代わりにsee docs
このエラーを取得する理由をDQLにはINSTR関数はありません
DQLのようなsee docs
何かは、SQLの限られた数をサポートしています関数:http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-functions。 instrはその1つではありません。独自のユーザ定義関数を追加するか、そこにdqlバンドルを使用する必要があります。 http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html @DenisAlimoxが示唆しているように、ネイティブクエリを使用します。 – Cerad