Куда можно вынести повторяющийся код из модели поиска?

В Yii, повторяющийся код из модели поиска можно вынести в отдельный класс, называемый "компонентом поиска". Компонент поиска - это класс, который инкапсулирует логику формирования запроса и выполнения поиска, чтобы не загромождать модель лишним кодом.

Для создания компонента поиска в Yii, вы можете выполнить следующие шаги:

1. Создайте новый класс в папке components вашего приложения (если ее нет, создайте ее). Например, SearchComponent.php.

2. В классе SearchComponent вам следует создать методы, которые будут выполнять функции поиска. Например, вы можете создать метод searchByCriteria, который будет принимать критерии поиска и возвращать результаты. Внутри этого метода вы можете вызывать методы модели для формирования запроса и выполнения поиска. Например:

class SearchComponent
{
    public function searchByCriteria($criteria)
    {
        $query = MyModel::find()
            ->where(['status' => 'active']);

        if (!empty($criteria['name'])) {
            $query->andWhere(['like', 'name', $criteria['name']]);
        }

        // другие условия поиска...

        return $query->all();
    }
}

3. В вашей модели поиска (MyModelSearch), вы можете использовать созданный компонент вместо дублирования кода. Например:

class MyModelSearch extends Model
{
    public function search($params)
    {
        $component = new SearchComponent();
        return $component->searchByCriteria($params);
    }
}

Теперь, вместо того, чтобы повторять код поиска в каждой модели, вы можете использовать компонент поиска для централизации и упрощения кода. Это улучшает поддерживаемость вашего кода и уменьшает количество дублирования.