我有一套'客户'它们显示在GridView中。 '客户'普通用户无法删除,只标记为删除。但是我希望它一旦被标记为删除就不会显示在列表中。
我使用的是Yii2,软删除表包含三列涉及数据的字段' foreign_table',' foreign_column'和' foreign_value'。它的设置是这样的,因为我不想删除“客户端”中的数据。表除非需要。
我如何过滤GridView的结果?
我会使用$ model->搜索吗?
答案 0 :(得分:1)
我相信您可以使用$model->search
来过滤结果,前提是已完成以下步骤:
state
或status
。search()
代表的模型的$model
方法中,您可以使用$criteria->condition = 'status=1 OR status=2';
指定用于过滤结果的条件。根据您的数据库以及您决定标记或标记为已删除的方式,您可能需要修改$criteria
。您甚至可以选择使用$criteria->with
来包含外表。
答案 1 :(得分:0)
因此,您有一个表格,用于保存对应被视为已删除的项目的引用。
我认为覆盖Client类的find()是合理的,因为在许多情况下你可能想要忽略标记为已删除的客户端。如果是这样,你可以在find()中编写适当的查询。作为一个很好的副作用,GridView将自动仅显示未标记为已删除的客户端。
要获取标记为已删除的客户端,您需要一个额外的方法,当然,如果需要的话(您可能希望直接在数据库中删除它们而且您不需要PHP代码这个)。但大多数时候你并不需要它们。所以你可以通过覆盖find方法来过滤它们。