yii2从ActiveDataProvider中删除模型

问题描述 投票:0回答:1

我有一个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中删除模型?或者什么是正确的程序?

model yii2
1个回答
1
投票

您有两种选择:

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.