大侠给讲解一下, $model->load() 与 validate() [ 2.0 版本 ]
$model->load($post)
还要不要 && $model->validate()
一起用?
更新和添加数据的时候有区别吗?
还有 model 里没写rules的时候 load()
会不会成功?load()
会不会验证rules里的规则?还是要validate()
的时候才验证rules?
最佳答案
-
要一起用,
load()
只是加载数据,validate()
才是验证。
更新和添加都用save()
,yii通过$model->isNewRecord
来判断是不是一条新纪录,然后调用insert()
或者update()
。
load()
和setAttributes()
方法都属于批量赋值,yii为了保护数据的安全性,是禁止批量赋值的,但是当数据符合rule规则的时候就可以批量赋值了,所以没写rules就不能用load()
。就算某个字段不需要什么规则,用户输入什么都可以,那么要把这个字段的规则设置safe,一般gii生成的model最后一行都是safe的。
你可以不用validate()
,因为save方法会先调用validate()
再执行insert()
或者update()
(看源码就知道)。共 3 条回复
其他 7 个回答
-
huaixiaoya 回答于 2016-03-23 17:34 举报
借楼问一个问题
model里面规定了必传的字段public function rules() { return [ [['title', 'content', 'authId'], 'required'] ]; }
但是还有其他的参数是非必传的
这时候 其他的字段就算赋值了也保存不了是什么原因呢? -
@huaixiaoya @大裤叉子 已经回答过了,需在rules里面配置上且属性为safe~~
qq260101081 广州
注册时间:2014-10-30
最后登录:2017-09-25
在线时长:13小时20分
最后登录:2017-09-25
在线时长:13小时20分
- 粉丝4
- 金钱40
- 威望10
- 积分270