你知道如何在ORDER BY中添加分数和规则查询构建器吗?下面的查询抛出一个Expected end of string, got '+'错误。
$qb = $this->createQueryBuilder('i')
->select(
'partial i.{ '.$fields.' }',
'partial c.{ id, title, description }',
'partial c2.{ id }',
'partial ch.{ id, name, icon, description }',
'partial t.{ id, tagname }',
"MATCH($searchFields) AGAINST(:searchTerm BOOLEAN) as score1",
'MATCH(t.tagname) AGAINST(:searchTerm BOOLEAN) as score2'
)
->join('i.categories', 'c')
->leftJoin('c.parent', 'c2')
->leftJoin('i.tags', 't')
->join('i.status', 's')
->join('c.channel', 'ch')
->join('ch.company', 'co')
->where("(MATCH($searchFields) AGAINST(:searchTerm BOOLEAN) > 5 OR MATCH(t.tagname) AGAINST(:searchTerm BOOLEAN) > 5 )")
->setParameters([
'searchTerm' => $searchTerm.'*',
])
->orderBy('score1 + score2', 'DESC');发布于 2017-01-30 16:52:27
不要紧,我只是简单地把字段加在一起就解决了。多伊尔。
$qb = $this->createQueryBuilder('i')
->select(
'partial i.{ '.$fields.' }',
'partial c.{ id, title, description }',
'partial c2.{ id }',
'partial ch.{ id, name, icon, description }',
'partial t.{ id, tagname }',
"(MATCH($searchFields) AGAINST(:searchTerm BOOLEAN) + MATCH(t.tagname) AGAINST(:searchTerm BOOLEAN)) as score"
)https://stackoverflow.com/questions/41931756
复制相似问题