@romicohen
Системный Архитектор

Как в ActiveRecord правильно реализовать множественные фильтры, где пустое значение фильтра будет значить «все записи»?

Такой код:

$customers = Customer::find()
    ->where(['status' => $status])
    ->all();


При $status == '' выберет поля, где значение либо '', либо NULL, я пока не углублялся, а мне нужно, чтобы оно просто не применяло этот фильтр и всё.

Например, чтобы:

$customers = Customer::find()
    ->where([
'status' => '',
'city' => 'Moscow',
])
    ->all();


выбрало все где есть 'Moscow' не учитывая статусы вовсе.

Такое вообще возможно в ActiveRecord или придется массив сначала формировать?

Спасибо.
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
Можно реализовать по разному. Во фреймворке для фильтрации данных моделей предусмотрен механизм "форм фильтрации" - моделей наследуемых от AR-моделей с методом search, который возвращает ActiveDataProvider.

Вот в этом ActiveDataProvider есть специальные методы для того что вам нужно (типа andFilterWhere)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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