3.2.2 - 普通 - 未处理
在配置有自动验证规则时,protected $_validate = array(
array('name', 'require', '物业公司账户名必须填写!', \Think\Model::MUST_VALIDATE, 'regex', \Think\Model::MODEL_INSERT),
array('name', '', '名称已经存在!', \Think\Model::VALUE_VALIDATE, 'unique', \Think\Model::MODEL_BOTH)
);当对一个包含有两条,或以上的数组数据,进行循环插入时,在第一条数据存在问题,导致验证失败后,后面数据一起无法插入成功,原因大概分析了一下,但可能不全在Model.class.php中,方法【autoValidation】存在问题,在这个函数体中,存在一句这样的代码:
// 批量验证的时候最后返回错误
if(!empty($this->error)) return false;我的理解是,如果对象中的error不为空,即会返回false,表示验证失败,这样,在循环添加数据时,当其中的第一条验证失败,导致给模型【error】赋值后,而在每一次验证时,并没有重置【error】,从而导致,以后的数据哪怕是正确的,也会被误判为错误。
实际的代码在于方法【autoValidation】,只有如下的代码:
if($this->patchValidate) { // 重置验证错误信息
$this->error = array();
}从我的个人理解应该,可以修改为:if($this->patchValidate) { // 重置验证错误信息
$this->error = array();
} else {
$this->error = '';
}个人意见,官方可能需要验证核实。 