yii2从ActiveDataProvider中删除模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii2从ActiveDataProvider中删除模型相关的知识,希望对你有一定的参考价值。

我有一个ActiveDataProvider,其中包括几个模型。现在我需要删除其中一个模型。让我说我的ActiveDataProvider名为$ allproducts有6个模型。现在我需要从$ allproducts中删除模型4。我怎样才能做到这一点?

我试图循环ActiveDataProvider,如果condition = delete,则删除该元素。在我的示例中,模型4(项目编号4)被标记为删除。

foreach ($allproducts as $key => $product){
    if ($value == 'delete') {   // model 4, $value = 'delete'
        unset($allproducts[$key]);
    }
}

但我认为这不是正确的方法。是否有一种特定的yii2方法从ActiveDataProvider中删除模型?或者什么是正确的程序?

答案

您有两种选择:

1)更改查询添加必要条件,例如:

$query = Model::find()->andWhere(['<>', 'value', 'deleted']);
$dataProvider = new yiidataActiveDataProvider([
    'query' => $query
]);

2)使用$ dataProvider-> model从ActiveDataProvider获取所有模型,循环返回数组并删除不需要的项目,例如:

$models = $dataProvider->models;
for($k=0;$k<count($models);$k++)
{
    if($models[$k]->value == 'deleted')
    {
        unset($models[$k]);
    }
}

我更喜欢第一个,因为它更清楚。

以上是关于yii2从ActiveDataProvider中删除模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 yii2 ActiveDataProvider 中使用 postgres 函数 string_agg()?

如何将 ActiveDataProvider 与 select2 一起使用?

如何将原始 SQL 转换为 Yii2,如查找查询

yii2GridView的简单使用

yii2之GridView小部件

利用yii2 gridview实现批量删除案例[转]