$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', ], ]); // grid filtering conditions $query->andFilterWhere([ 'brand_id' => $this->brand_id, ]); $query->orderBy(['brand_id' => SORT_ASC]); return $dataProvider; } /** * @param null|Category $category * @param array $params * @param null|ActiveQuery $productQuery * * @return ActiveQuery */ public function getBrands($category = null, $params = [], $productQuery = null) { $query = Brand::find() ->select([ Brand::tableName() .'.*' ]) ->innerJoin(Product::tableName(), Product::tableName() .'.brand_id='. Brand::tableName() .'.brand_id') ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() .'.product_id='. Product::tableName() .'.product_id'); $query->innerJoin('product_variant', 'product_variant.product_id = '. Product::tableName() .'.product_id'); $query->where(['!=', 'product_variant.stock', 0]); $query->groupBy(Product::tableName() .'.product_id'); if (!empty($category)) { $query->andWhere([ ProductCategory::tableName() .'.category_id' => $category->category_id ]); } $query->groupBy(Brand::tableName() .'.brand_id'); return $query; } }