我有一个自定义的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();
答案 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');