joinWith('lang'); // 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' => [ 'id', 'brandName' => [ 'asc' => [ 'brand_lang.title' => SORT_ASC ], 'desc' => [ 'brand_lang.title' => SORT_DESC ], ], ], ]); // grid filtering conditions $query->andFilterWhere([ 'brand.id' => $this->id, ]) ->andFilterWhere([ 'ilike', 'brand_lang.title', $this->brandName, ]); return $dataProvider; } /** * * @todo Refactor this * @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() . '.id') ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() . '.product_id=' . Product::tableName() . '.id'); $query->innerJoin('product_variant', 'product_variant.product_id = ' . Product::tableName() . '.id'); $query->where([ '!=', 'product_variant.stock', 0, ]); $query->groupBy(Product::tableName() . '.id'); if(!empty( $category )) { $query->andWhere([ ProductCategory::tableName() . '.category_id' => $category->id, ]); } $query->groupBy(Brand::tableName() . '.id'); return $query; } }