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]); }
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; }