$this->getSearchQuery($category, $params, $in_stock)->with([ 'images', 'events', 'variant', 'variant.image', 'comments', 'averageRating', ])->all(), 'pagination' => [ 'pageSize' => 15, ], 'sort' => [ 'attributes' => [ 'name' => [ 'asc' => ['name' => SORT_ASC], 'desc' => ['name' => SORT_DESC], 'default' => SORT_DESC, 'label' => 'имени', ], 'price' => [ 'asc' => ['price' => SORT_ASC], 'desc' => ['price' => SORT_DESC], 'default' => SORT_DESC, 'label' => 'по цене', ], ], ] ]); return $dataProvider; } public function getSearchQuery($category = null, $params = [], $in_stock = true) { if (!empty($category)) { /** @var ActiveQuery $query */ /**@var Category $category **/ $query = $category->getProducts(); } else { $query = Product::find(); } $query->select(['product.*']); $query->joinWith(['enabledVariants','brand','options', 'category']); $query->groupBy(['product.product_id', 'product_variant.price']); FilterHelper::setNewQueryParams($query, $params); if($in_stock){ $query->andWhere(['!=', ProductVariant::tableName() .'.status', 1]); } return $query; } /** * @param Category|null $category * @param array $params * @return array */ public function priceLimits($category = null, $params = []) { if (!empty($category)) { /** @var ActiveQuery $query */ $query = $category->getProducts(); } else { $query = Product::find(); } $query->joinWith('variant'); return [ 'min' => $query->min(ProductVariant::tableName() .'.price'), 'max' => $query->max(ProductVariant::tableName() .'.price'), ]; } }