找到所有类似的模型:
$models=Termin::model()->findAll(
array("condition"=>"status = 3"));
并使用foreach设置新状态:
foreach($models as $data) {
$data->status=1;
if($data->save())
{
echo 'saved';
}
}
但没有任何反应;(
答案 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()我想到了!