2014-12-01 4 views
3

Я хотел бы принести некоторые события, заказанные с пронумерованными страницами по этим критериям:Doctrine2: пользовательский раздел OrderBy

  • открытых событий менее чем на 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(); 
} 

Это обеспечит события с открытым первым, любой идеей, чтобы справиться с < 20ого критерием в построителе запросов? Должен ли я использовать собственный запрос? Могу ли я смешивать оба?

Большое спасибо за учитывая мою просьбу :)

ответ

4

, что вы хотите, чтобы различать события, которые «близко» и «далеко». вы должны добавить

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

Не знаю этот synthax, спасибо! Он работает, но не в моем случае. Поле «расстояние» вычисляется по предыдущему предложению select и не может использоваться для другого выбора :( Колонка не найдена: 1054 Неизвестный столбец «sclr6» в поле «0», –

+0

, не видя, что вы добавили в свой код, я не могу помочь дальше –

Смежные вопросы