Laravel新增或更新数据

1,534次阅读
没有评论

共计 687 个字符,预计需要花费 2 分钟才能阅读完成。

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

按照常规思路来说,一般都只能通过 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
 0
clark
版权声明:本站原创文章,由 clark 于2022-03-18发表,共计687字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)