with('brandName'); // add conditions that should always apply here $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $this->load($params); /*if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; }*/ $dataProvider->setSort([ 'attributes' => [ 'brand_name', 'alias' ] ]); // grid filtering conditions $query->andFilterWhere([ 'brand_id' => $this->brand_id, 'brand_name_id' => $this->brand_name_id, ]); $query->joinWith('brandName'); $query->andFilterWhere(['ilike', 'alias', $this->alias]) ->andFilterWhere(['ilike', 'image', $this->image]) ->andFilterWhere(['ilike', 'meta_title', $this->meta_title]) ->andFilterWhere(['ilike', 'meta_desc', $this->meta_desc]) ->andFilterWhere(['ilike', 'meta_robots', $this->meta_robots]) ->andFilterWhere(['ilike', 'seo_text', $this->seo_text]) ->andFilterWhere(['ilike', 'brand_name.value', $this->brand_name]); return $dataProvider; } public function getBrands($category = null, $params = []) { $query = Brand::find() ->select([ Brand::tableName() .'.*', 'COUNT('. ProductCategory::tableName() .'.product_id) AS _items_count' ]) ->innerJoin(Product::tableName(), Product::tableName() .'.brand_id='. Brand::tableName() .'.brand_id') ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. Product::tableName() .'.product_id') ->with('brandName'); if (!empty($category)) { $query->where([ ProductCategory::tableName() .'.category_id' => $category->category_id ]); } $query->groupBy(Brand::tableName() .'.brand_id'); if (isset($params['options'])) { unset($params['options']); } if (!empty($params['prices'])) { if ($params['prices']['min'] > 0 || $params['prices']['max'] > 0) { $query->innerJoin(ProductVariant::tableName(), ProductVariant::tableName() .'.product_id='. Product::tableName() .'.product_id'); } if ($params['prices']['min'] > 0) { $query->andWhere(['>=', ProductVariant::tableName() .'.price', $params['prices']['min']]); } if ($params['prices']['max'] > 0) { $query->andWhere(['<=', ProductVariant::tableName() .'.price', $params['prices']['max']]); } } $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); return $dataProvider; } }