Как фильтровать данные по двум датам с помощью ModelSearch в Yii2?

Есть модель данных, в которой есть поле date_start.
Необходимо реализовать фильтрацию по диапазону дат (between).

Для дейтпикера я установил расширение от kartik
Код виджета выглядит следующим образом
<div class="container">
        <div class="col-md-6">
            <?='<label class="control-label">Valid Dates</label>';?>
            <?= DatePicker::widget([
                'name' => 'from_date',
                'type' => DatePicker::TYPE_RANGE,
                'name2' => 'to_date',
                'options' => ['placeholder' => 'Start date','class' => 'datepicker'],
                'options2' => ['placeholder' => 'End date', 'class' => 'datepicker'],
                'pluginOptions' => [
                    'autoclose'=>true,
                    'format' => 'yyyy/mm/dd'
                ]
            ]);

            ?>
        </div>
    </div>


5cdb8ec5de984db5964e8a424afc9935.jpg

Каким образом организовать фильтрацию данных с помощью ModelSearch?
  • Вопрос задан
  • 1697 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Vitalij_D Автор вопроса
Есть небольшие сдвиги, добился фильтрации.

1. Виджет с дейтпикерами перенес в ГридВью
[
                'attribute' => 'date_start',
                'label' => 'Date start',
                'filter' => DatePicker::widget([
                    'name' => 'CampaignSearch[from_date]',
                    'type' => DatePicker::TYPE_RANGE,
                    'name2' => 'CampaignSearch[to_date]',
                    'options' => ['placeholder' => 'Start date','class' => 'datepicker'],
                    'options2' => ['placeholder' => 'End date', 'class' => 'datepicker'],
                    'pluginOptions' => [
                        'autoclose'=>true,
                        'format' => 'yyyy/mm/dd',
                    ]
                ]),
            ],


2. Создал в модели 2 поля:
public $from_date;
    public $to_date;


3. В ModelSearch добавил новые поля модели в safe и добавил фильтрацию
->andFilterWhere(['between', 'date_start', $this->from_date,$this->to_date]);


Какая проблема осталась:
1. При выборе даты в поле ОТ или ДО - дата проставляется сразу в оба поля (так было задумано плагином).
2. После этого сразу уходит запрос на сервер для фильтра. Получается у пользователя нет времени чтобы выбрать две даты. Каким образом можно это избежать? В принципе можно убрать дублирование даты в оба поля сразу...Возможно тогда проблема частично исчезнет.
Ответ написан
@TarMaks
У меня такая же проблема! Пока не могу решить.
Если вдруг вспомните что у Вас есть решение отпишетесь плиз!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы