bla*_*lah 6 php mysql symfony doctrine-orm
我有Service与实体title,tags与description领域.使用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)
您可以为此使用本机查询。前任。:
$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