FireDemon
(Firedemonru)
1
Есть класс:
class PerformancesAR extends ActiveRecord {
public function relations(){
return array(
'in_schedules' => array( self::HAS_MANY, 'ScheduleAR', 'perf_id', 'condition'=>'sdate >= \''.TODAY.'\'', 'limit' => 1, 'order' => 'sdate' ),
'begin_schedules' => array( self::HAS_MANY, 'ScheduleAR', 'perf_id', 'condition'=>'sdate >= \''.TODAY.'\'', 'order' => 'sdate ASC', 'limit' => 1 ),
'end_schedules' => array( self::HAS_MANY, 'ScheduleAR', 'perf_id', 'condition'=>'sdate >= \''.TODAY.'\'', 'order' => 'sdate DESC', 'limit' => 1 ),
);
}
}
Нужно сделать listAll() и отсортировать:
в первом случае, если есть запись в in_schedules записи должны идти первыми
во втором случае по begin_schedules.sdate
как это можно реализовать?
Charger
(Charger)
2
Что именно нужно отсортировать?
Достаточно ли написать метод listAll и все необходимые манипуляции делать в нем, возвращая результат?
FireDemon
(Firedemonru)
3
Нужно что бы выбранные данные из таблицы performance отсортировались.
Хотелось бы это сделать средствами ActiveRecord… Написать отдельную функцию конечно можно, но это будут костыли(
Charger
(Charger)
4
Что бы указать сортировку по умолчанию для данных получаемых через findAll можно определить функцию
public function scopes(){
return array(
'published'=>array(
'condition'=>'status=1',
),
);
}
Но если вам нужна сортировка по наличию связанных записей в других таблицах, то вопрос тут скорее в том, как написать правильный SQL запрос.
FireDemon
(Firedemonru)
5
на SQL это выглядит так:
SELECT performances.*,
(SELECT sdate FROM schedule WHERE sdate >= NOW()AND perf_id = performances.id ORDER BY sdate ASC LIMIT 1) as begin_date,
(SELECT sdate FROM schedule WHERE sdate >= NOW()AND perf_id = performances.id ORDER BY sdate DESC LIMIT 1) as end_date
FROM performances ORDER BY begin_date limit 100;