鶏口牛後な日々

心の赴くまま、やりたいことを仕事に。

Laravelでリレーション関係にある親テーブルをアップデートする時、小テーブルも同時にアップデートさせたい

リレーションシップ、まだ慣れていません。

でも、よくあるユーザー情報のアップデート処理するときに、ユーザーに紐づく別テーブル、例えば ユーザーの好きなもの(favorite) という他のテーブルがあったとします。

これも同時にアップデートしたい、ということがあると思います。

そのやり方を調べたのでメモります。

まずはリレーションをモデルで宣言しておく

モデルの方での宣言の仕方は、公式にいっぱい書いてあるので割愛します。

今回は、1ユーザーあたり、複数のfavetoriteがあるという想定ですので、 ユーザーモデルの方には、 hasMany() をつけておき、favoriteモデルの方には、 belongsTo() をつけておくようにします。

でもやることはこれだけ!

かると便利、リレーションシップ

コントローラーでsaveするときに、リレーションを使う

あとは、コントローラーで、saveを宣言するだけなのですが、リレーションシップを宣言しておくと、以下のようにかけて終わりです。

$user->favorite->save();

なるほど、ユーザーのプロパティの一つであるかのように使えるのですね。これは便利。

ちなみに、もちろん favorite のカラムにそれぞれ情報を代入する時は、

$user->favorite->id = '2';
$user->favorite->name = 'hogehoge';

のように操作することができます。

これだといちいち、Favoriteモデルを呼び出して〜、とかしなくていいので、とても便利です。

以上です。