Laravelでリレーション関係にある親テーブルをアップデートする時、小テーブルも同時にアップデートさせたい
リレーションシップ、まだ慣れていません。
でも、よくあるユーザー情報のアップデート処理するときに、ユーザーに紐づく別テーブル、例えば ユーザーの好きなもの(favorite)
という他のテーブルがあったとします。
これも同時にアップデートしたい、ということがあると思います。
そのやり方を調べたのでメモります。
まずはリレーションをモデルで宣言しておく
モデルの方での宣言の仕方は、公式にいっぱい書いてあるので割愛します。
今回は、1ユーザーあたり、複数のfavetoriteがあるという想定ですので、
ユーザーモデルの方には、 hasMany()
をつけておき、favoriteモデルの方には、 belongsTo()
をつけておくようにします。
でもやることはこれだけ!
わかると便利、リレーションシップ
コントローラーでsaveするときに、リレーションを使う
あとは、コントローラーで、saveを宣言するだけなのですが、リレーションシップを宣言しておくと、以下のようにかけて終わりです。
$user->favorite->save();
なるほど、ユーザーのプロパティの一つであるかのように使えるのですね。これは便利。
ちなみに、もちろん favorite
のカラムにそれぞれ情報を代入する時は、
$user->favorite->id = '2'; $user->favorite->name = 'hogehoge';
のように操作することができます。
これだといちいち、Favoriteモデルを呼び出して〜、とかしなくていいので、とても便利です。
以上です。