如何在原则查询生成器中按匹配结果排序



我有一个自定义的 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

相关内容

  • 没有找到相关文章

最新更新