【Laravel】DBにデータを保存・更新する方法

こんにちは!CODE CLUB965のKです!

今回は、LaravelでDBにデータを保存、更新する方法について書こうと思います。

データの取得方法についてはよく使う基本的なものをまとめた記事がありますので参考に読んでみて下さい。

取得したデータを保存する

save()

save()は、DBにデータを保存する際に使用します。

ちなみにデータが同じであれば保存はされず、「updated_at」も更新されません

使い方は特に難しくなく、以下の例のように使用します。

$user = User::find(1)
$user->name = $request->name;
$user->save();

上記の例は、任意のユーザーを検索し、そのユーザーの名前をリクエストされた名前に更新して保存している処理です。

もし、ここで「$request->name」が既存のデータと同じ場合は、データは保存されず、updated_atも更新されません。

データを更新する

update()

データを更新する場合は、update()を使用します。

こちらは特に既存データの差分は見ずに更新されます。
そのため、updated_atも更新されます。

以下のように使用します。

$user = User::find(1)->update(['name' => $request->name]);

処理の内容として結果として、save()と同じですが、既存のデータとの差分を見ていないところが違います。

同じでもupdated_atは更新されます。

save()とupdate()の違い

上記でsave()とupdate()について書きましたが、その違いは何か分かりましたか?

結論を言うと以下の通りです。

・save():更新データとの差分を見て更新するか決めている
・update():更新データとの差分を見ずに更新する

この違いは大きいのでしっかり理解しておきましょう!

ちなみにupdate()で更新する前に値が更新されているか確認したい場合は、「isDirty()」を使いましょう。

以下のようにupdate()前に使用すれば値を更新すべきかどうかを判定できます。

$user = App\User::find(1);

// 値の更新(更新前を「taro」とする)
$user->name = 'jiro';

// $userが更新されていればDBのデータを更新する
if($user->isDirty())
{
 $user->update();
}

上記のように「isDirty()」は、データが更新されていればtrueを返します。

DBのレコードを更新するか否かを判断する場合に使用しましょう!

最後に

今回は、データを保存・更新する場合に使用するsave()とupdate()について解説しました。

save()とupdate()の違いをしっかり理解した上で使用しましょう!

それでは、また!

Follow me!