Как правильно отфильтровать значение?

Всем привет, как правильно от фильтровать значение то что на скрине.

есть таблица ProductSeeds
id | ... | ... | ripeness_group <-- тут integer значения хранятся виде 180, 200 или 300, 500
id =>
...
ripeness_group => 180
---
id =>
...
ripeness_group => 200
и так далее


также есть поисковая модель ProductSeedsSearch, но я пока не понимаю как это сделать
spoiler
<?php

namespace common\models;

use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use yii\data\Sort;
use yii\helpers\VarDumper;

/**
 * ProductSeedsSearch represents the model behind the search form about `common\models\ProductSeeds`.
 */
class ProductSeedsSearch extends ProductSeeds
{
    public $sort;
    public $category_title;

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['id', 'status', 'new', 'hit', 'sale', 'stock', 'top_sales', 'top_ten', 'category_id', 'quantity', 'img_id', 'gallery_id', 'brand_id', 'ripeness_group', 'country_id', 'rateNum', 'availability', 'created_at', 'updated_at'], 'integer'],
            [['title', 'content', 'vendor_code', 'seo_keywords', 'seo_description', 'category_title', 'sort'], 'safe'],
            //[['old_price', 'price'], 'number'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function scenarios()
    {
        // bypass scenarios() implementation in the parent class
        return Model::scenarios();
    }

    /**
     * Creates data provider instance with search query applied
     *
     * @param array $params
     *
     * @return ActiveDataProvider
     */
    public function search($params)
    {
//        $query = ProductSeeds::find();

        // add conditions that should always apply here

        $id = Yii::$app->request->get('id');

        $query = ProductSeeds::find()->joinWith('category')->where(['category_id' => $id]);
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 10,
            ],
        ]);
        $this->load($params);

        if (!$this->validate()) {
            return $dataProvider;
        }

        // grid filtering conditions
        $query->andFilterWhere([
            'brand_id' => $this->brand_id,
            'country_id' => $this->country_id,
            'ripeness_group' => $this->ripeness_group,
        ]);




        $query->andFilterWhere([
            'and',
            ['>=', 'price', Yii::$app->request->get('min_zena')],
            ['<=', 'price', Yii::$app->request->get('max_zena')]
        ]);


//        if ($this->price) {
//            $range = explode(',', $this->price);
//
//            $query->andFilterWhere([
//                'and',
//                ['>=', 'price', $range[0]],
//                ['<=', 'price', $range[1]]
//            ]);
//        }

        return $dataProvider;
    }
}
DmBZ6aqcNPxpDm.png
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
А как так сложилось, что в поисковой модели нет ripeness_group? Надо добавить его в rule. А там уже зависимо где и чем сортируете. В gridView будет автоматом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
1. Объявляете в моделе свойства min_ripeness и max_repiness
2. C помощью JS добавляете к запросу фильтрации отправляему по нажатию на кнопку "Ок" значения этих свойств
3. Фильтруете данные с помощью query->andFilterWhere(['between', 'ripeness_group', $this->min_ripeness, $this->max_ripeness]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы