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

В модели поиска в админке есть фильтрация по статусу в базе для последующего вывода отфильтрованных данных в шаблоне. Вот пример модели GameSearch:
public function search(array $params)
{
    /** @var \yii\db\ActiveQuery $query */
    $query = Game::find();

    // Фильтры по статусу в базе
    if ($params && $params['GameSearch']) {
        if (!isset($params['GameSearch']['all'])) {
            /** @var string|array $value */
            foreach ($params['GameSearch'] as $key => $value) {
                if (!empty($value)) {
                    $query->where([$key => $params['GameSearch'][$key]]);

                    break;
                }
            }
        }

        unset($params['GameSearch']);
    }

// остальной код

Этот блок присутствует во многих моделях поиска.
Подскажите, куда можно вынести этот код?
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
rpsv
@rpsv
делай либо хорошо, либо никак
Создайте трейт в него добавьте метод `fillGameSearch` и подключайте где нужно:
trait GameSearchStatus
{
    public function fillGameSearch(ActiveQuery $query, array $params)
    {
        $gameSearch = $params['GameSearch'] ?? null;
        if (is_array($gameSearch) && !isset($gameSearch['all'])) {
            foreach ($gameSearch as $key => $value) {
                if (!empty($value)) {
                    $query->where([
                        $key => $value,
                    ]);
                    break;
                }
            }
        }
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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