laravel updateOrCreate与updateOrInsert 的区别

laravel updateOrCreate 和 updateOrInsert 的区别

updateOrCreate() 和 updateOrInsert() 两个方法都是用来保存数据的时候方便操作“ 存在即更新,反之则创建 ”的

updateOrCreate 方法使用的是 Eloquent ORM 操作的数据库(支持自动添加创建和更新时间) –有时候我们需要判断某条数据是否存在,如果存在更新,否则插入,那可能你需要updateOrCreate

updateOrInsert 方法使用的是查询构造器(不可以自动添加创建和更新时间)

updateOrCreate 返回值是\Illuminate\Database\Eloquent\Model, updateOrInsert 返回的是 bool。可以看两个方法的源码注释部分的 @return

下面是updateOrCreate文档说明和源码

updateOrCreate 源码部分:

在这里插入图片描述

// 如果有从奥克兰到圣地亚哥的航班则将价格设置为 $99
// 如果没有匹配的模型则创建之
$flight = App\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99]
);
// namespace Illuminate\Database\Eloquent;

/**
     * Create or update a record matching the attributes, and fill it with values.
     *
     * @param  array  $attributes
     * @param  array  $values
     * @return \Illuminate\Database\Eloquent\Model   
     */
    public function updateOrCreate(array $attributes, array $values = [])
    {
        return tap($this->firstOrNew($attributes), function ($instance) use ($values) {
            $instance->fill($values)->save();
        });
    }

参数$attributes是where条件,根据attributes参数去数据库匹配是否有相关数据,如果没有则新建数据,有就查询出来

然后在fill参数values的值去保存

$create_bool = Logistics::updateOrCreate([
	'id' => $model['id'],
],[
	'a' => $model['a'],
	'a' => $model['b'],
	'a' => $model['c'],
	'a' => $model['d'],
]);

updateOrInsert 源码部分:

// namespace Illuminate\Database\Query

/**
     * Insert or update a record matching the attributes, and fill it with values.
     *
     * @param  array  $attributes
     * @param  array  $values
     * @return bool
     */
    public function updateOrInsert(array $attributes, array $values = [])
    {
        if (! $this->where($attributes)->exists()) {
            return $this->insert(array_merge($attributes, $values));
        }

        return (bool) $this->take(1)->update($values);
    }

firstOrCreate、firstOrNew、updateOrCreate 方法使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值