2014-09-29 26 views
1

我有一組「客戶端」,它們顯示在GridView中。 「客戶」不能被普通用戶刪除,只能標記爲刪除。不過,我希望它們在標記爲刪除時不會顯示在列表中。在GridView的索引視圖上過濾結果Yii2

我使用的是Yii2,軟刪除表包含三個涉及數據'foreign_table','foreign_column'和'foreign_value'的列。它的設置就像我不想刪除'客戶'表中的數據,除非需要它。

我該如何去過濾GridView的結果?

我會用$ model-> search嗎?

+0

你能工作嗎? – linil 2014-12-08 12:17:14

回答

0

所以你有一個表格,你可以保存對應該被視爲刪除的項目的引用。

我認爲重寫客戶端類的find()可能是合理的,因爲可能有很多情況下您想忽略標記爲已刪除的客戶端。如果是這樣,你可以在find()中寫出適當的查詢。作爲一個不錯的副作用,GridView將只顯示未被標記爲已刪除的客戶端。

爲了得到被標記爲已刪除的客戶端,您需要額外的方法,當然,如果需要這樣做(您可能希望直接在數據庫中刪除它們,並且不需要此代碼)。但大多數時候你不需要它們。所以你可以通過重寫find方法來過濾它們。

1

我相信你可以使用$model->search過濾結果,提供了以下步驟已經完成:

  1. 你必須標記行的手段標記爲刪除:statestatus
  2. $model所代表的模型的search()方法中,指定用於過濾結果的標準:$criteria->condition = 'status=1 OR status=2';

根據您的數據庫以及您決定如何標記或標記爲已刪除,您可能需要修改$criteria。你甚至可以選擇使用$criteria->with來包含外部表。