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->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]); if (!empty($this->brand_name)) { $query->andFilterWhere(['ilike', 'name', $this->brand_name]); } $query->orderBy('brand_id', 'asc'); return $dataProvider; } public function getBrands($category = null, $params = [], $productQuery = null) { // $queryCount = ProductHelper::productCountQuery($category, $params, ['brands']); /*if (!empty($params['prices'])) { if ($params['prices']['min'] > 0) { $queryCount->andWhere(['>=', ProductVariant::tableName() .'.price', $params['prices']['min']]); } if ($params['prices']['max'] > 0) { $queryCount->andWhere(['<=', ProductVariant::tableName() .'.price', $params['prices']['max']]); } }*/ // if (!empty($params['options'])) { // $queryCount->innerJoin(TaxOption::tableName(), TaxOption::tableName()) // } $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'); // $queryCount = Product::find() // ->select(['COUNT(product.product_id)']) // ->where('product.brand_id = brand.brand_id'); // $queryCount->andWhere('(SELECT COUNT(pv.product_variant_id) FROM "product_variant" "pv" WHERE pv.stock != 0 AND pv.product_id = product.product_id) > 0'); // if (!empty($category)) { // $queryCount->andWhere('(SELECT COUNT(pc.product_id) FROM product_category pc WHERE pc.product_id = product.product_id AND pc.category_id = '. $category->category_id .') > 0'); // } // if (!empty($params['options'])) { // $queryCount->innerJoin('product_option', 'product_option.product_id = product.product_id'); // $queryCount->innerJoin('tax_option', 'tax_option.tax_option_id = product_option.option_id'); // $queryCount->innerJoin('tax_group', 'tax_group.tax_group_id = tax_option.tax_group_id'); // foreach ($params['options'] as $group => $options) { // $queryCount->andWhere([ // 'tax_group.alias' => $group, // 'tax_option.alias' => $options // ]); // } //// $query->addSelect("(SELECT COUNT(product_option.product_id) AS products FROM product_option INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id WHERE tax_group.alias LIKE '$group' AND tax_option.alias IN (" . implode(',', $options) . ")) AS _items_count"); // } // $query->addSelect(['_items_count' => $queryCount]); // if ($productQuery) { // $productQuery->select(['COUNT(product.product_id)']); // $query->addSelect(['_items_count' => $productQuery]); // } $query->innerJoin('product_variant', 'product_variant.product_id = '. Product::tableName() .'.product_id'); $query->where(['!=', 'product_variant.status', 1]); $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; } public static function findByAlias($alias) { /** @var CategoryQuery $query */ $query = Brand::find() ->andFilterWhere(['alias' => $alias]); if (($model = $query->one()) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } } }