首先在doctrine查询构建器中选择完全匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了首先在doctrine查询构建器中选择完全匹配相关的知识,希望对你有一定的参考价值。

我需要在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 "AppBundleRepository".

这是我的查询:

$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
答案

你可以使用native query"Additional DQL functions for Doctrine2"

以上是关于首先在doctrine查询构建器中选择完全匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 symfony 在教义查询构建器中选择表之间的特定连接?

Doctrine查询构建器 - 参数太少

将 TINYINT 添加到 Doctrine SQL 类型

Doctrine:不指定类完全限定名 (FQN) 的 DQL 查询

在 Laravel get() 查询构建器中附加两个数组

010. CSS 选择器