我有一个自定义的 dql 匹配函数,并希望在按该分数排序之前选择比赛结果作为"分数"。如何调整以下查询来实现此目的?
$qb = $this->getEntityManager()->createQueryBuilder();
$qb
->select('i', 'bi')
->from('AdminBundle:Items', 'i')
->where('i.instock=1')
->leftJoin('AdminBundle:MyTable','bi',DoctrineORMQueryExprJoin::WITH, 'i.id = bi.productId')
->andWhere('bi.productId IS NULL')
->andWhere('MATCH (i.brand, i.store, i.title, i.description, i.keywords) AGAINST (:search BOOLEAN) > 0')
->andWhere('i.instock = 1')
->setParameter('search', $searchString)
->setMaxResults( $limit )
;
$results = $qb->getQuery()->getArrayResult();
我不知道
我是否理解你的问题,你想在你的选择中添加你的位置(匹配...)并按它排序吗?
您可以添加未映射的选择,如下所示:
$qb->addSelect('MY_FUNCTION(my.params) AS HIDDEN mySelectAlias')
在您的情况下,例如:
$qb->addSelect('(MATCH (i.brand, i.store, i.title, i.description, i.keywords) AGAINST (:search BOOLEAN)) AS HIDDEN mySelectAlias')
并按您的顺序:
$qb->orderBy('mySelectAlias', 'desc');
完整示例:https://coderwall.com/p/o5snag