【问题标题】:Select exact match first in doctrine query builder在学说查询生成器中首先选择完全匹配
【发布时间】:2018-08-28 07:51:04
【问题描述】:

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

【问题讨论】:

    标签: symfony doctrine query-builder


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 2021-04-06
      • 2011-11-03
      • 2013-09-29
      • 1970-01-01
      • 2017-09-18
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多