我需要在Symfony 3.4中的查询生成器中编写一个查询。它必须按完全匹配的顺序订购。例如,我有3行的列名为:
“test”、“test 1”、“test1”,当我搜索字符串“text”时,顺序是:
1. test
2. test1
3. test 1
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)
1. pod czapkÄ
2. czapka
3. czapka z daszkiem
4. czapka zimowa