thinkphp批量更新php,thinkphp6数据批量更新

方法1:

$sql="UPDATE $this->table SET ";

$primarykeyfield="id";

$updatekeys=array_keys($data[0]);

$sql.=array_reduce($updatekeys,function($a,$b) use ($data,$primarykeyfield){

if($b != $primarykeyfield) {

$cache = $b . "= case " . $primarykeyfield . " ";

$v = array_reduce($data, function ($c, $d) use ($b, $primarykeyfield) {

return $c .= " when " . $d[$primarykeyfield] . " then " . $d[$b];

}, "");

if (!empty($v)) {

$a .= $cache . $v." end, ";

}

}

return $a;

}," ");

$sql=rtrim($sql, ', ');

$sql.=" where ".$primarykeyfield." IN (".implode(',',array_column($data,$primarykeyfield)).")";

只用什么一个data数组

[['aaa'=>1,'number'=>3,'id'=>2],['aaa'=>2,'number'=>12,'user_id'=>2]]

再修primarykeyfield="主键名称"

执行

Db::execute($sql);

方法2:

可以例如上面数组在模型里面只需要

$list = [

['aaa'=>1,'number'=>3,'id'=>2],

['aaa'=>2,'number'=>12,'user_id'=>2,'id'=>3]

];

$this->saveAll($list);

缺点有bug就是如果表没有主键的会报错

还有如果数组只有一条也会报错提交数据不存在:method not exist:think\db\Query->saveAll

我看了哈,有bug但是不想动底层,因为后期框架升级很麻烦,

方法3:

循环使用里面update来更新

$savenumber=0;

foreach($list as $key=>$val){

$id=$val['id'];

unset($val['id']);

$savenumber += $this->where(['id'=>$id])->update($val);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值