yii中load()、validate()、save()

1、load()与validate()要一起用
      load()只是加载数据,validate()才是验证。


2、更新和添加都用save()

   (1)   可以不用validate(),因为save方法会先调用validate()再执行insert()或者update()。

      yii通过$model->isNewRecord 来判断是不是一条新纪录,然后调用insert()或者update()。

$model = new AdminUser();
$model->username = 'john';
$model->remark = 'engineer';//假设adminUser对应的数据表中不存在此字段
$model->save(false);//若无false参数,则会保存失败

或:是二维数组的值,需要加载数据$model->load($params)

if (Yii::$app->request->isPost) {
$params = Yii::$app->request->post();
$params['GachaFishPrizeType']['create_at'] = strtotime($params['GachaFishPrizeType']['created_at']);
if ($model->load($params) && $model->save()) {
echo '<pre>';
var_dump($params);
exit;
return $this->redirect(['view', 'id' => $model->id]);
}

(2)如果你之前进行了validate验证,后面可以save(false),save()默认true,为true时一样调用的validate  ,save(false)也不校验rules规则

if($fish_model->save()){

return "保存成功!";
}
echo '<pre>';
var_dump($fish_model->getErrors()); //看看错误


3、load()和setAttributes()方法都属于批量赋值,yii为了保护数据的安全性,是禁止批量赋值的,但是当数据符合rule规      则的时候就可以批量赋值了,所以没写rules就不能用load()。

 

4、就算某个字段不需要什么规则,用户输入什么都可以,那么要把这个字段的规则设置safe,一般gii生成的model最后       一行都是safe的。


5、当你调用 save()、insert()、update() 这三个方法时,会自动调用yii\base\Model::validate()方法

posted @ 2019-09-19 17:58  星云惊蛰  阅读(635)  评论(0)    收藏  举报