public function getByFilter(array $mainSearchAttributes, array $typeSearchAttributes)
{
$criteria = new CDbCriteria(['select' => 't.*', 'distinct' => true, 'params' => []]);
$criteria->addCondition('t.status = :status');
$criteria->params['status'] = Product::STATUS_ACTIVE;
//поиск по категории, производителю и цене
foreach ($this->attributeFilter->getMainSearchParams() as $param => $field) {
if (empty($mainSearchAttributes[$param])) {
continue;
}
if ('category' === $param) {
$categories = [];
foreach ($mainSearchAttributes[$param] as $categoryId) {
$categories[] = (int) $categoryId;
$categories = CMap::mergeArray($categories, StoreCategory::model()->getChildsArray($categoryId));
}
$builder = new CDbCommandBuilder(Yii::app()->getDb()->getSchema());
$criteria->addInCondition('t.category_id', array_unique($categories));
$criteria->addCondition(sprintf('t.id IN (SELECT product_id FROM {{store_product_category}} WHERE %s)', $builder->createInCondition('{{store_product_category}}', 'category_id', $categories)), 'OR');
continue;
}
if (isset($mainSearchAttributes[$param]['from'], $mainSearchAttributes[$param]['to'])) {
$criteria->addBetweenCondition("t." . $field, $mainSearchAttributes[$param]['from'], $mainSearchAttributes[$param]['to']);
} elseif (isset($mainSearchAttributes[$param]['from']) && !isset($mainSearchAttributes[$param]['to'])) {
$criteria->addCondition("t.{$field} >= :attr_{$field}");
$criteria->params[":attr_{$field}"] = $mainSearchAttributes[$param]['from'];
} elseif (isset($mainSearchAttributes[$param]['to']) && !isset($mainSearchAttributes[$param]['from'])) {
$criteria->addCondition("t.{$field} <= :attr_{$field}");
$criteria->params[":attr_{$field}"] = $mainSearchAttributes[$param]['to'];
} else {
$criteria->addInCondition("t." . $field, $mainSearchAttributes[$param]);
}
}
//поиск по названию и артикулу
if (!empty($mainSearchAttributes[AttributeFilter::MAIN_SEARCH_PARAM_NAME])) {
$criteria->addSearchCondition('name', $mainSearchAttributes[AttributeFilter::MAIN_SEARCH_PARAM_NAME], true);
$criteria->addSearchCondition('sku', $mainSearchAttributes[AttributeFilter::MAIN_SEARCH_PARAM_NAME], true, 'OR');
}
$criteria->mergeWith($this->buildCriteriaForTypeAttributes($typeSearchAttributes));
return new CActiveDataProvider('Product', ['criteria' => $criteria, 'pagination' => ['pageSize' => (int) Yii::app()->getModule('store')->itemsPerPage, 'pageVar' => 'page'], 'sort' => ['sortVar' => 'sort', 'defaultOrder' => 't.position']]);
}