对于unique不能验证UPDATE操作问题的解决方案

浏览:1717 发布日期:2015/08/25 分类:技术分享 关键字: 验证 unique
实际操作过程中发现unique只是对于INSERT操作有效,对于UPDATE操作,如果unique验证的字段值未进行修改,就会因为该值在数据库中已经存在,如果再采用unique验证则会报错。建议采取一定的措施解决,如新增一个针对UPDATE操作的附加规则uniqueu,或对现有的unique结合验证时间进行验证,目前UPDATE只能手动查询数据库验证唯一性。

对于unique不能验证UPDATE操作问题的解决方案(只是针对本问题作出的修改,具体对框架的架构有没有其他影响还没进行验证,如有问题请多指正。)

1.控制器:create方法增加第三个参数(参数为数组),作为查询对应数据的索引。$model->create(I('post.'),2,array('admin_id'=>$admin_id))
2.Think\Model.class.php修改
LINE 993:create方法增加第三参数$index(参数为数组)。 public function create($data='',$type='',$index=array())
LINE 1042:增加第三参数$index。if(!$this->autoValidation($data,$type,$index)) return false;
LINE 1179:autoValidation方法增加第三参数$index(参数为数组)。protected function autoValidation($data,$type,$index=array()) {
LINE 1204:增加第三参数$index。if(false === $this->_validationField($data,$val,$index))
LINE 1209:增加第三参数$index。if(false === $this->_validationField($data,$val,$index))
LINE 1214:增加第三参数$index。if(false === $this->_validationField($data,$val,$index))
LINE 1233:_validationField方法增加第三参数$index(参数为数组)。protected function _validationField($data,$val,$index=array()) {
LINE 1236:增加第三参数$index。if(false === $this->_validationFieldItem($data,$val,$index)){
LINE 1254:_validationFieldItem方法增加第三参数$index(参数为数组)。protected function _validationFieldItem($data,$val,$index=array()) {
LINE 1291:将本行的代码if($this->where($map)->find()) return false;
修改为:
if(($val[5] == 2 || $val[5] == 3) && !empty($index)){
$count = $this->where(array(key($index)=>array('NEQ', $index[key($index)])))->where($map)->count();
if($count) return false;
}else{
if($this->where($map)->find()) return false;
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>