Ejemplo n.º 1
0
 public function afterDelete()
 {
     parent::afterDelete();
     foreach ($this->getPhotos()->all() as $photo) {
         $photo->delete();
     }
     if ($this->image) {
         @unlink(Yii::getAlias('@webroot') . $this->image);
     }
     ItemData::deleteAll(['item_id' => $this->primaryKey]);
 }
Ejemplo n.º 2
0
 public static function applyFilters($filters, $query)
 {
     if (is_array($filters)) {
         if (!empty($filters['price'])) {
             $price = $filters['price'];
             if (is_array($price) && count($price) == 2) {
                 if (!$price[0]) {
                     $query->andFilterWhere(['<=', 'price', (int) $price[1]]);
                 } elseif (!$price[1]) {
                     $query->andFilterWhere(['>=', 'price', (int) $price[0]]);
                 } else {
                     $query->andFilterWhere(['between', 'price', (int) $price[0], (int) $price[1]]);
                 }
             }
             unset($filters['price']);
         }
         if (count($filters)) {
             $filtersApplied = 0;
             $subQuery = ItemData::find()->select('item_id, COUNT(*) as filter_matched')->groupBy('item_id');
             foreach ($filters as $field => $value) {
                 if (!is_array($value)) {
                     $subQuery->orFilterWhere(['and', ['name' => $field], ['value' => $value]]);
                     $filtersApplied++;
                 } elseif (count($value) == 2) {
                     if (!$value[0]) {
                         $additionalCondition = ['<=', 'value', (int) $value[1]];
                     } elseif (!$value[1]) {
                         $additionalCondition = ['>=', 'value', (int) $value[0]];
                     } else {
                         $additionalCondition = ['between', 'value', (int) $value[0], (int) $value[1]];
                     }
                     $subQuery->orFilterWhere(['and', ['name' => $field], $additionalCondition]);
                     $filtersApplied++;
                 }
             }
             if ($filtersApplied) {
                 $query->join('LEFT JOIN', ['f' => $subQuery], 'f.item_id = ' . Item::tableName() . '.item_id');
                 $query->andFilterWhere(['f.filter_matched' => $filtersApplied]);
             }
         }
     }
     return $query;
 }