symfony - 学说2 : custom orderBy clause

标签 symfony doctrine-orm

我想获取一些事件,按这些标准排序和分页:

  • 20公里以内开启事件
  • 不到 20 公里的传入事件
  • 超过 20 公里的开放赛事
  • 超过 20 公里的传入事件

  • 我可以处理打开/传入的订单,但我无法先切断 < 20km,这是我的查询构建器的样子:
    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();
    }
    

    这将首先提供打开的事件,任何想法在查询构建器中处理 < 20km 标准?我必须使用 native 查询吗?我可以混合使用吗?

    非常感谢您考虑我的要求:)

    最佳答案

    你想要的是区分“接近”和“远”的事件。
    你应该添加

    ->addSelect('(CASE WHEN distance > 20 then 1 ELSE 0 END) AS is_far')
    ->addOrderBy('is_far ASC')
    

    关于symfony - 学说2 : custom orderBy clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27227232/

    相关文章:

    php - 如何在没有 Doctrine 关系的情况下加入?

    php - 如果 where 子句是零整数,为什么 sql 查询返回一个值?

    symfony - 除了 symfony2 中数据库的内容之外,还添加自定义值

    php - 'SELECT count(DISTINCT o0_.id) AS sclr_0 FROM Order o0_' 执行时出现异常

    symfony2 中的 phpunit - 未执行任何测试

    mysql - 学说 2 : GROUP BY field DESC error

    php - Symfony2 形式 + 学说 - 选择的选择

    symfony - 如何处理计算出的实体属性

    php - 根据 SonataAdminBundle 中的其他更改字段

    symfony - Doctrine - "Missing value for primary key"