Doctrine QueryBuilder按字段优先级排序结果

bla*_*lah 6 php mysql symfony doctrine-orm

我有Service与实体title,tagsdescription领域.使用QueryBuilder搜索服务时,如何按字段优先级排序结果.例如,当我搜索术语时,php我希望php在列表顶部的标题中获得服务,然后php在其描述中使用其标签和服务中的服务作为最后一个.

这是我的Querybuilder的一部分:

    $qb = $this->createQueryBuilder('service');
    $qb->leftJoin('service.tags', 'tag');

    $conditions = array($conditions[] = $qb->expr()->eq('service.enabled', true));
    $conditions[] = $qb->expr()->eq('service.category', $categoryId);
    $term = '%' . $term . '%';
    $conditions[] = $qb->expr()->orX(
            $qb->expr()->like('service.title', "'$term'"),
            $qb->expr()->like('service.description',  "'$term'"),
            $qb->expr()->like('tag.name', "'$term'")
        );

    $conditions = call_user_func_array(array($qb->expr(), 'andX'), $conditions);

    $qb->where($conditions);
Run Code Online (Sandbox Code Playgroud)

Max*_* P. 2

您可以为此使用本机查询。前任。:

    $em = $this->get('doctrine')->getManager();

    $sql = "
        select *
        from service s
        where
            s.title like '%xxx%'
            or s.tags like '%xxx%'
            or s.description  like '%xxx%'
        order by 
            s.title like '%xxx%' desc,
            s.tags like '%xxx%' desc,
            s.description  like '%xxx%' desc
    ";

    $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($em);
    $rsm->addRootEntityFromClassMetadata('\You\Entity\Service\Class', 's');

    $query = $em->createNativeQuery($sql, $rsm);

    $data = $query->getResult();

    dump($data);
Run Code Online (Sandbox Code Playgroud)

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html如何在orm中使用sql插入dql