この記事では、LaravelのEloquentメソッドであるsave()とupdate()について違いを紹介しています。
どちらのメソッドもデータを保存するメソッドですが微妙に動きが異なります。
違いを理解することで適切なメソッドを書くことができるのでぜひ参考にしてみてください。
Laravelのsave()とupdate()の違い
では早速違いについて紹介していきます。
結論から言うと、「save()はデータ更新の差分を確認して、update()はデータ更新の差分を確認しない」というのが大きな違いになります。
エンジニアにおすすめ書籍
エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!
保存処理を使ってsave()とupdate()の違いを解説
どういうことか、実際のコードを使って解説します。
ユーザーの名前変更の処理を例にしてみます。
save()の場合
save()を使ってユーザーの名前を更新する場合は以下のようなコードになります。
public function updateUserName(User $user, Request $request)
{
$user->name = $request->name;
$user->save();
}
update()の場合
update()の場合は以下のようになります。
public function updateUserName(User $user, Request $request)
{
$user->name = $request->name;
$user->update([
'name' => $request->name
]
);
}
既存のデータと同じ場合に違いが生まれる
それぞれのデータ更新でどのような違いがあるのでしょうか。
違いが生まれるのは更新するデータに差分があるかどうかです。
先ほどの例だと、$requestで渡ってきたユーザー名「$request->name」を更新する処理でした。
save()では、「$request->name」が既存のデータと異なるかチェックをします。
チェックした結果、異なる場合のみに更新処理を行います。
同じだった場合は更新処理は行いません。
逆にupdate()は、そのようなチェックは行わず更新処理を行います。
つまり、既存のデータと同じデータが渡ってきたときに「save()は何もしない、update()はupdated_atが更新される」ということです。
save()とupdate()の違いを理解して使い分けよう
いかがだったでしょうか。
微妙な差ですが2つのメソッドにはこのような違いがあります。
違いを知っているといざという時に迷わずメソッドを選択できます。
参考になれば幸いです。