Doctrine2 添加 'LIKE' 到 addOrderBy

Doctrine2 add 'LIKE' to addOrderBy

我尝试使用 Doctrine2 查询生成器进行的查询是:

SELECT * FROM tbl t0_ ORDER BY t0_.column1 LIKE '%value%' DESC, t0_.id DESC

我目前拥有的:

    $qb = $this->_em->createQueryBuilder();
    $qb->add('select', 'p')
        ->add('from', 'S2\Entity\Tbl p')
        ->addOrderBy('p.column1 LIKE "%value%"', 'DESC')
        ->addOrderBy('p.id', 'desc');

这会导致异常 Error: Expected end of string, got 'LIKE'

如何将此 like 添加到我的 addOrderBy

编辑

作为替代方案,我也尝试过:

$qb = $this->_em->createQueryBuilder();
$qb->add('select', 'p')
    ->add('select', 'LOCATE("value", p.column1) as HIDDEN field_search')
    ->add('from', 'S2\Entity\Tbl p')
    ->addOrderBy('field_search', 'DESC')
    ->addOrderBy('p.id', 'desc');

但这会不断抛出不知道 locate 是什么的异常。

我想这样做的原因是要在其余行上方显示带有 value 的行。

例如,我的 table 看起来像:

id | column1
1  | some text
2  | some content
3  | contains value
4  | Could contain value
5  | some more text
6  | lots of text

我追求的输出是:

id | column1
4  | Could contain value
3  | contains value
6  | lots of text
5  | some more text
2  | some content
1  | some text

因此 id 降序排列,包含 value 的行出现在结果集的顶部。

请使用下一个查询按相关性过滤您的数据:

    $qb = $this->_em->createQueryBuilder();
    $result = $qb->select("p")
        ->from('S2\Entity\Tbl', 'p')
        ->addSelect("(CASE
                   WHEN p.column1 like 'Text %' THEN 0
                   WHEN p.column1 like 'Text%' THEN 1
                   WHEN p.column1 like '%Text' THEN 2
                   ELSE 3 END) AS HIDDEN ORD "
        )
        ->addOrderBy('ORD', 'ASC')
        ->getQuery()
        ->getResult();