首先在原则查询生成器中选择完全匹配

时间:2018-08-28 07:51:05

标签: 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;

我尝试在查询生成器中使用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)

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

但是现在我对波兰字符有疑问。当出现波兰字符时,根据排序方向,该结果将返回第一位或最后一位。例如,当$ searchTerm为“ czapka”时,结果为:

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

1 个答案:

答案 0 :(得分:1)