【laravel】updateOrCreate 和 updateOrInsert 的區別
其他 · 發表
updateOrCreate()和updateOrInsert()兩個方法都是用來儲存資料的時候方便操作“ 存在即更新,反之則建立 ”的
updateOrCreate方法使用的是Eloquent ORM操作的資料庫(支援自動新增建立和更新時間),updateOrInsert方法使用的是查詢構造器(不可以自動新增建立和更新時間)
updateOrCreate返回值是\Illuminate\Database\Eloquent\Model,updateOrInsert返回的是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
文章標籤
全站熱搜
