Yii Framework Forum: Acriverecord, Сортировка По Данным Из Relations - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

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

#1 User is offline   FireDemon 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 11-October 12

Posted 11 October 2012 - 06:43 AM

Есть класс:

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

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

#2 User is offline   Charger 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 317
  • Joined: 03-September 11

Posted 11 October 2012 - 06:49 AM

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

#3 User is offline   FireDemon 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 11-October 12

Posted 11 October 2012 - 06:55 AM

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

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

#4 User is offline   Charger 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 317
  • Joined: 03-September 11

Posted 11 October 2012 - 07:29 AM

Что бы указать сортировку по умолчанию для данных получаемых через findAll можно определить функцию
public function scopes(){
    return array(
        'published'=>array(
            'condition'=>'status=1',
        ),
    );
}


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

#5 User is offline   FireDemon 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 11-October 12

Posted 12 October 2012 - 01:32 AM

View PostCharger, on 11 October 2012 - 07:29 AM, said:

Что бы указать сортировку по умолчанию для данных получаемых через 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;
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users