Сначала выберите точное соответствие в построителе доктрин - PullRequest
0 голосов
/ 28 августа 2018

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