В 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); } }
Теперь, вместо того, чтобы повторять код поиска в каждой модели, вы можете использовать компонент поиска для централизации и упрощения кода. Это улучшает поддерживаемость вашего кода и уменьшает количество дублирования.