Symfony Doctrine2:自定义orderBy子句
我想获取一些按照这些条件排序和分页的事件:Symfony Doctrine2:自定义orderBy子句,symfony,doctrine-orm,Symfony,Doctrine Orm,我想获取一些按照这些条件排序和分页的事件: 在不到20公里的时间内举办活动 在不到20公里内发生的事件 20公里以外的公开赛 20公里以外的传入事件 我可以处理打开的/收到的订单,但我不能先缩短
- 在不到20公里的时间内举办活动
- 在不到20公里内发生的事件
- 20公里以外的公开赛
- 20公里以外的传入事件
public function fetchByLocation($day, $time, $latitude, $longitude, $page = 1, $itemPerPage = 10)
{
if(!$page) {
$page = 1;
}
$qb = $this->createQueryBuilder('event')
->select('event', 'GEO_DISTANCE(:latitude, :longitude, event.latitude, event.longitude) AS distance')
->setParameter('latitude', $latitude)
->setParameter('longitude', $longitude)
->where('(event.day = :day AND event.start >= :time) OR event.day > :day')
->setParameter('day', $day)
->setParameter('time', $time)
->addOrderBy('event.day', 'asc')
->addOrderBy('event.start', 'asc');
$qb->setFirstResult(($page - 1) * $itemPerPage)
->setMaxResults($itemPerPage);
return $qb->getQuery()->getResult();
}
这将为事件提供opened first,在查询生成器中处理<20km标准有何想法?我必须使用本机查询吗?我能把两者混合吗
非常感谢您考虑我的请求:)您想要区分的是“近”和“远”事件。 你应该加上
->addSelect('(CASE WHEN distance > 20 then 1 ELSE 0 END) AS is_far')
->addOrderBy('is_far ASC')
我不知道这个Syntax,谢谢!这是工作,但不是在我的情况下。“距离”字段由上一个select子句计算,不能用于另一个select:(未找到列:1054“字段列表中的未知列“sclr6”)如果看不到您在代码中添加的内容,我将无法进一步帮助