如何通过doctrine querybuilder中的匹配结果进行排序?

时间:2014-02-26 16:07:57

标签: symfony doctrine-orm doctrine

我有一个自定义的dql匹配函数,并希望在按该分数排序之前选择匹配结果作为“得分”。如何调整以下查询来实现此目的?

    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb
        ->select('i', 'bi')
        ->from('AdminBundle:Items', 'i')
        ->where('i.instock=1')
        ->leftJoin('AdminBundle:MyTable','bi',\Doctrine\ORM\Query\Expr\Join::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();

1 个答案:

答案 0 :(得分:2)

我不知道我是否理解您的问题,您是否想要在您的选择中添加您所拥有的内容(匹配...)并按顺序添加?

您可以像这样添加未映射的选择:

$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