2014-10-24 2 views
0

У меня есть модель группы с HAS_MANY отношение к ScheduleElement. нужны создать возможности для фильтрации групп: Группы должна иметь минимальную одно ScheduleElement для всех комбинаций полого ScheduleElement в: week_number (1-2), week_day (1-7), semester_id = 1Yii для фильтрации моделей по условиям отношений

+0

Вы поняли, как это сделать в простом SQL? – topher

+0

Если бы у меня был SQL, я бы сделал это сам :-( – Sc0Rp1D

ответ

1

Я нахожу решение самого, исходный код: https://github.com/sc0rp1d/schedule/blob/e510ad72b95e9491af9ff2f5692d9b0e469140f7/models/Group.php#L95

public function filled($bool = true) 
    { 
    $schedule_table = ScheduleElement::model()->tableName(); 
    $semester = Semesters::model()->actual(); 
    $criteria = $this->getDbCriteria(); 
    $criteria->params[':semester_id'] = $semester->id; 
    for ($i = 1; $i <= 2; $i++) { 
     for ($j = 1; $j <= 6; $j++) { 
      $sql = "(SELECT COUNT(*) FROM `$schedule_table` 
       WHERE `$schedule_table`.`week_number` = $i 
       AND `$schedule_table`.`week_day` = $j 
       AND `$schedule_table`.`group_id` = `t`.`id` 
       AND `$schedule_table`.`semester_id` = :semester_id) " 
       . ($bool ? ">" : "=") . " 0"; 
      $criteria->addCondition($sql, $bool ? 'AND' : 'OR'); 
     } 
    } 
    return $this; 
} 
+0

Для справки в будущем просто добавьте код в ответ. Только ссылки ответы считаются плохими ответами. – topher