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();
我尝试使用 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();