php批量更新数据 有重复名称数据,Thinkphp批量更新数据的方法汇总

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

方法三:

/*

* @param $saveWhere :想要更新主键ID数组

* @param $saveData :想要更新的ID数组所对应的数据

* @param $tableName : 想要更新的表明

* @param $saveWhere : 返回更新成功后的主键ID数组

* */

public function saveAll($saveWhere,&$saveData,$tableName){

if($saveWhere==null||$tableName==null)

return false;

//获取更新的主键id名称

$key = array_keys($saveWhere)[0];

//获取更新列表的长度

$len = count($saveWhere[$key]);

$flag=true;

$model = isset($model)?$model:M($tableName);

//开启事务处理机制

$model->startTrans();

//记录更新失败ID

$error=[];

for($i=0;$i

//预处理sql语句

$isRight=$model->where($key.'='.$saveWhere[$key][$i])->save($saveData[$i]);

if($isRight==0){

//将更新失败的记录下来

$error[]=$i;

$flag=false;

}

//$flag=$flag&&$isRight;

}

if($flag ){

//如果都成立就提交

$model->commit();

return $saveWhere;

}elseif(count($error)>0&count($error)

//先将原先的预处理进行回滚

$model->rollback();

for($i=0;$i

//删除更新失败的ID和Data

unset($saveWhere[$key][$error[$i]]);

unset($saveData[$error[$i]]);

}

//重新将数组下标进行排序

$saveWhere[$key]=array_merge($saveWhere[$key]);

$saveData=array_merge($saveData);

//进行第二次递归更新

$this->saveAll($saveWhere,$saveData,$tableName);

return $saveWhere;

}

else{

//如果都更新就回滚

$model->rollback();

return false;

}

}

在测试方法中调用:

public function test(){

//要更新的数据表的主键数组

$where['ID']=array(70,73,74,80,83);

//ID主键数组对应的待更新数据

$save=array(

array('School'=>'DK Univisity01','isExport'=>0),

array('School'=>'DK Univisity02','isExport'=>0),

array('School'=>'DK Univisity03','isExport'=>0),

array('School'=>'DK Univisity04','isExport'=>0),

array('School'=>'','isExport'=>0),

// array('School'=>' Univisity05','isExport'=>0),

);

$f=$this->saveAll($where,$save,'want');

if(count($f['ID'])>0){

//返回更新成功的ID数组

echo "This is success :";

dump($f);

echo 'ok';

}else{

//更新失败操作

echo "This is failed :";

dump($f);

echo 'error';

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值