LaravelのEloquentモデルでユーザー登録時に他のテーブルのレコードを作成する方法

LaravelのEloquentモデルでユーザー登録時に他のテーブルのレコードを作成する方法

36 回閲覧されました

みなさんこんにちは、jonioです。

今回はLaravelのEloquentモデルを使ってユーザー登録時に他のテーブルのレコードを作成する方法を解説します。

Laravelのバージョン

今回の解説は8系を使いました。

ライフサイクルイベント

イベントはモデルを使って保存する・削除するなど何らかの操作をすることを指します。

LaravelのEloquentモデルには例えば下記のライフサイクルイベントがあります。

  • creating : モデルが保存される前
  • created : モデルが保存された後
  • updating : モデルが更新される前
  • updated : モデルが更新された後
  • deleting : モデルが削除される前
  • deleted : モデルが削除された後

今回はユーザー作成後にユーザー設定用のテーブル(user_settings)のレコードを作成します。

User.php

下記の記述をします。

protected static function booted()
{
    static::created(function ($user) {
        $user->userSettings()->create([
            'user_settingsテーブルのカラム1' => "登録する値",
            'user_settingsテーブルのカラム2' => "登録する値",
        ]);
    });
}

public function userSettings() {
    return $this->hasOne('App\Models\UserSetting');
}

ユーザー作成時にuser_settingsテーブルのレコードを作成するのでリレーション(12行目〜14行目)をします。

3行目〜8行目でuser_settingsテーブルのレコードを作成しています。

3行目の「::created」が先ほど掲載したモデルイベントのcreatedに該当します。

「static::イベント名」でイベントが動作します。

「$user」はUserクラスのインスタンスです。

解説はUserクラスのインスタンスなので$userにしていますが名称は何でもいいです。

5行目・6行目でuser_settingsテーブルの値を登録しています。

イベントを実行するコード

イベントを実行する時は1行目のbootedメソッドを使いますが一般的なコードは下記になります。

protected static function booted()
{
    static::イベント名(function ($変数名) {
        $変数名->リレーションのメソッド->create([
            カラムに対する値の設定
        ]);
    });
}