Exemplo n.º 1
0
 public function option($key, $value, $sign = '=')
 {
     if (!is_array($value)) {
         $value = [$value];
     }
     $filter = Filter::findOne(['slug' => $key]);
     if (!$filter) {
         throw new \yii\base\Exception('Filter do not find');
     }
     $numeric_value = (int) current($value);
     if ($sign == '=') {
         $variants = FilterVariant::findAll(['filter_id' => $filter->id, 'value' => $value]);
     } elseif ($sign == '>') {
         $variants = FilterVariant::find()->where('filter_id = :filter_id AND numeric_value > :value', [':filter_id' => $filter->id, ':value' => $numeric_value])->all();
     } else {
         $variants = FilterVariant::find()->where('filter_id = :filter_id AND numeric_value < :value', [':filter_id' => $filter->id, ':value' => $numeric_value])->all();
     }
     $filterIds = [];
     foreach ($variants as $variant) {
         $filterIds[$filter->id][] = $variant->id;
     }
     if (empty($filterIds)) {
         return $this->owner->andWhere(['id' => 0]);
     }
     return $this->filtered($filterIds, 2);
 }