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

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

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

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

Буду ли я использовать $model->search?


person user1724416    schedule 29.09.2014    source источник
comment
Удалось ли вам заставить это работать?   -  person Barilee    schedule 08.12.2014


Ответы (2)


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

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

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

person Barilee    schedule 29.11.2014

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

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

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

person robsch    schedule 26.11.2014