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([
カラムに対する値の設定
]);
});
}