Фильтрация результатов при просмотре индекса в GridView Yii2

У меня есть набор «клиентов», и они отображаются в GridView. «Клиенты» не могут быть удалены обычным пользователем, только помечены для удаления. Однако мне бы хотелось, чтобы они не отображались в списке, если они помечены для удаления.

Я использую Yii2, и таблица мягкого удаления содержит три столбца, которые относятся к данным «foreign_table», «foreign_column» и «foreign_value». Он настроен так, что я не хочу удалять данные из таблицы «Клиенты», если в этом нет необходимости.

Как бы я отфильтровать результаты GridView?

Буду ли я использовать $ модель-> поиск?

1

Решение

Я считаю, что вы могли бы использовать $model->search отфильтровать результат при условии, что следующие шаги уже выполнены:

  1. У вас есть возможность пометить строки, помеченные для удаления: state или же status,
  2. в search() Метод Модели представлен $model Вы определяете критерии, используемые для фильтрации результатов, используя: $criteria->condition = 'status=1 OR status=2';,

В зависимости от вашей базы данных и того, как вы решили пометить или пометить как удаленный, вам может потребоваться изменить $criteria, Вы даже можете использовать $criteria->with включить зарубежные таблицы.

1

Другие решения

Таким образом, у вас есть таблица, в которой вы сохраняете ссылки на элементы, которые следует рассматривать как удаленные.

Я думаю, что было бы разумно переопределить find () класса Client, поскольку во многих случаях можно игнорировать помеченных как удаленных клиентов. Если это так, вы можете написать соответствующий запрос в find (). В качестве приятного побочного эффекта GridView будет автоматически показывать только не помеченных как удаленных клиентов.

Чтобы получить клиентов, помеченных как удаленные, вам, конечно, понадобится дополнительный метод, если он вообще нужен (вы можете удалить их непосредственно в БД, и для этого вам не нужен код php). Но в большинстве случаев они вам не нужны. Таким образом, вы можете отфильтровать их, переопределив метод поиска.

0

По вопросам рекламы [email protected]