Symfony 在条令查询生成器中首先选择精确匹配

Symfony 在条令查询生成器中首先选择精确匹配,symfony,doctrine,query-builder,Symfony,Doctrine,Query Builder,我需要在Symfony 3.4中的查询生成器中编写一个查询。它必须按完全匹配的顺序订购。例如,我有3行的列名为: “test”、“test 1”、“test1”,当我搜索字符串“text”时,顺序是: 1. test 2. test1 3. test 1 在mysql中,它使用以下查询: SELECT * FROM table t WHERE col LIKE '%test%' ORDER BY INSTR(col,'test') asc, col asc; 我尝试在查询生成器中使用函数LO

我需要在Symfony 3.4中的查询生成器中编写一个查询。它必须按完全匹配的顺序订购。例如,我有3行的列名为: “test”、“test 1”、“test1”,当我搜索字符串“text”时,顺序是:

1. test
2. test1
3. test 1
在mysql中,它使用以下查询:

SELECT *
FROM table t
WHERE col LIKE '%test%'
ORDER BY INSTR(col,'test') asc, col asc;
我尝试在查询生成器中使用函数LOCATE和INSTR,但出现错误:

Attempted to call function "LOCATE" from namespace "AppBundle\Repository".
这是我的疑问:

$qb->select('c.id')
                ->from($this->_entityName, 'c')
                ->where('c.name LIKE :searchTerm')
                ->orderBy(LOCATE($searchTerm, 'c.name'), $sortDirection)
                ->groupBy('c.id')
                ->setParameter('searchTerm', '%' . $searchTerm . '%');
编辑:我解决了这个问题

->orderBy(LOCATE($searchTerm, 'c.name'), $sortDirection)

但现在我对波兰人的角色有了问题。当波兰字符出现时,根据排序方向,返回第一个或最后一个位置。例如,当$searchTerm为“czapka”时,结果为:

1. pod czapką
2. czapka
3. czapka z daszkiem
4. czapka zimowa
您可以使用or

1. pod czapką
2. czapka
3. czapka z daszkiem
4. czapka zimowa