yii 1.1在foreach中保存$ models,没有任何反应

时间:2018-01-10 15:13:59

标签: foreach yii save

找到所有类似的模型:

$models=Termin::model()->findAll(
            array("condition"=>"status = 3"));

并使用foreach设置新状态:

foreach($models as $data) {

            $data->status=1;
            if($data->save())
            {
                echo 'saved';
            }
        }

但没有任何反应;(

2 个答案:

答案 0 :(得分:1)

<强>校正: 从Yii 1.1开始,您可以使用save()进行更新和保存操作。 CActiveRecord(您的模型的父类)自动确定当前模型(在您的情况下为$data)是新记录还是从db(具有$data->isNewRecord属性)检索的。如果记录是新鲜的,CActiveRecord类将自动使用insert()方法,如果从现有记录集中检索到它,则会切换到update()

您的问题: save()方法(来自CActiveRecord父类)有两个可选参数。一个用于在实际发送到数据库处理程序进行保存之前运行验证(在模型规则中设置),另一个用于指定要保存的属性。默认情况下,此验证设置为true - 意味着:plain $data->save()方法将运行所有模型级验证。如果验证失败,则不会尝试编写记录,而是将错误详细信息添加到模型中。您可以通过在模型上调用$data->getErrors()方法来获取这些错误。 (请注意,getErrors()来自另一个父类CModel

如果您调用$data->save(false),将不会运行模型验证[在模型的rules()中定义],并且将传递记录以供数据库处理程序进行写入。这将成功返回(或者如果在数据库级别有任何错误 - 例如外键/唯一/其他),则返回例外。

因此,我会按如下方式重构您的代码:

foreach($models as $data) {
    $data->status=1;

    try { // try catch block to capture db level mishaps

        if ($data->save(true)) { // run model validations and if success

            echo 'saved';

        } else { // model validations failed

            // Debug with var_dump($data->getErrors()) or Yii's CVarDumper class
            // And/Or Display error message to user

        }

    } catch (CException $ex) { // This will catch any errors thrown during db write

       // Debug with var_dump($ex)
       // And/Or Display error message to user

    }
}

答案 1 :(得分:0)

我自己找到了解决方案。

在yii 1.1中,它的update()代替save()。在yii 2中你总是可以使用save()我想到了!