Поиск по GridView

Всем хорошего дня) Подскажите, есть ли какое-то красивое решение, чтобы сделать несколько разных поисков по одной модели? Я сгенерировал в gii класс для поиска ApplicationsSearch, на его в контроллере я создаю DataProvider, но мне нужно создавать провайдер данных с разным условием выборки. Первый провайдер данных для открытых заявок (первая таблица грида) - статус = open, второй для закрытых - status = close и еще несколько провайдеров. решить задачу я пока смог двумя способами. Первый мне показался уместным, пока я не столкнулся с необходимостью создать третье условие выборки - я просто внутри самой модели поиска создаю несколько провайдеров данных, перебираю их в цикле и возвращаю массивом. Но когда появилась необходимость добавить третье условие выборки для третьего провайдера, это уже стало походить на нагромождение кода. Второй вариант решения проблемы - просто создать несколько отдельных файлов типа NewApplicationsSerch, CloseApplicationsSerch и так далее. Но возникает избыточность кода, хотя они все и наследуются от базовой модели Applications и их поддержка не трудна, но все же по сути это куча файлов с одинаковым кодом с той лишь разницей, что у них query (выборка данных) разная. И сейчас пока писал этот текст еще пришел в голову третий вариант - создать базовый класс поиска ApplicationsSearch и наследоваться от него, а в новых классах NewApplicationsSerch, CloseApplicationsSerch и так далее переопределять только свойство query. Вроде уже выглядит логичнее, но в то же время хочу услышать ваши советы, может кто подскажет, что-то дельное? :unsure:

Пока что сделал, как в третьем варианте - добавил свойство $query, переопределяю метод search и внутри этого метода устанавливаю новое значение для $query.


<?php


namespace backend\modules\applications\models\search;


use backend\modules\applications\models\search\ApplicationsSearch;

use Yii;

use backend\modules\applications\models\Applications;


/**

 * NewApplicationsSearch represents the model behind the search form about `backend\modules\applications\models\Applications`.

 */

class NewApplicationsSearch extends ApplicationsSearch

{


    /**

     * Creates data provider instance with search query applied*

     *

     * @param array $params

     *

     * @return ActiveDataProvider

     */

    public function search($params)

    {


        // Переопределяем свойство query для вывода только новых заявок

        $this->query = Applications::find()->where(['promo_id' => $params['promo_id'], 'open' => 0]);


        return parent::search($params);

        

    }

}