【laravel】updateOrCreate 和 updateOrInsert 的區別

其他 · 發表 

updateOrCreate() 和 updateOrInsert() 兩個方法都是用來儲存資料的時候方便操作“ 存在即更新,反之則建立 ”的

updateOrCreate 方法使用的是 Eloquent ORM 操作的資料庫(支援自動新增建立和更新時間),updateOrInsert 方法使用的是查詢構造器(不可以自動新增建立和更新時間)

updateOrCreate 返回值是\Illuminate\Database\Eloquent\ModelupdateOrInsert 返回的是 bool。可以看兩個方法的原始碼註釋部分的 @return

下面是updateOrCreate文件說明和原始碼

// 如果有從奧克蘭到聖地亞哥的航班則將價格設定為 $99
// 如果沒有匹配的模型則建立之
$flight = App\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99]
);

updateOrCreate 原始碼部分:

// 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();
        });
    }

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);
    }

 

 

--

轉自 https://blog.csdn.net/u010324331/article/details/82698211

文章標籤
全站熱搜
創作者介紹
創作者 dizzy03 的頭像
dizzy03

碎碎念

dizzy03 發表在 痞客邦 留言(0) 人氣(4)