Acriverecord, Сортировка По Данным Из Relations

Есть класс:




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

как это можно реализовать?

Что именно нужно отсортировать?

Достаточно ли написать метод listAll и все необходимые манипуляции делать в нем, возвращая результат?

Нужно что бы выбранные данные из таблицы performance отсортировались.

Хотелось бы это сделать средствами ActiveRecord… Написать отдельную функцию конечно можно, но это будут костыли(

Что бы указать сортировку по умолчанию для данных получаемых через findAll можно определить функцию




public function scopes(){

    return array(

        'published'=>array(

            'condition'=>'status=1',

        ),

    );

}



Но если вам нужна сортировка по наличию связанных записей в других таблицах, то вопрос тут скорее в том, как написать правильный SQL запрос.

на 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;