Laravel新增或更新数据

170次阅读
没有评论

在日常开发中经常会遇到数据的新增和更新,对于已经存在的数据,直接覆盖,对于不存在的数据就写入一条新的记录。

按照常规思路来说,一般都只能通过foreach循环来处理,先查询,再判断,再执行,对于少量数据还可以,但是对于大量数据,这样效率就太低了

<?php
 // $data是需要处理的数据集

 foreach($data){
     if(DB::('users')->find($data['id'])){
       //进行更新操作
     }else{
       //进行新增操作
     }
 }

对于大量数据批量执行下来,很容易出现超时等情况,造成处理失败,所以Laravel提供了一个批量处理方法,`upsert`:

upsert

该方法的第一个参数包含要插入或更新的值,而第二个参数列出了在关联表中唯一标识记录的列。该方法的第三个也是最后一个参数是一个列数组,如果数据库中已经存在匹配的记录,则应该更新这些列。如果在模型上启用了时间戳,upsert 方法将自动设置

来看个例子:

Flight::upsert([
    ['start' => 'beijing', 'end' => 'shanghai', 'price' => 500],
    ['start' => 'shenzhen', 'end' => 'beijing', 'price' => 800]
], ['start', 'end'], ['price']);

在上面的示例中,会根据第二个数组内的关键字段进行查询,如果存在就更新price参数值。

重要提示

该方法在使用时候,根据文档提示,需要为第二个数组建立索引关系,否则这个方法并不会正常新增或者更新,只会不停的新增下去,所以在确定好更新关系之后,切记做好索引关系的配置。

加入官方交流QQ群:778957856
post-qrcode
clark
版权声明:本站原创文章,由 clark2022-03-18发表,共计687字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码