Мне нужно написать запрос в построителе запросов в 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