質問: 現在、usersテーブルに新しい行がinsertされた時に、user_detailsテーブルに同時に新しい行をinsertしようとしています。 やりたいこととしては、ユーザーがアカウント登録をすると、usersテーブルにid, name, email, passwordのカラムを持ったデータをinsertし、それと同時にuser_detailsテーブルのusers_idカラムにusersテーブルのidと同じ値を入れるということです。 コードは以下のように書いています。 ``` protected function create(array $data) { DB::transaction(function () use ($data) { DB::table('user_details')->insert(['users_id' => DB::table('users')->count() + 1]); return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); }); } ``` user_detailsテーブルのusers_idとusersテーブルのidはズレてはいけないので、トランザクションを使っています。トランザクションを使うのは初めてなのですが、このような使い方で合っているでしょうか? しかし DB::transaction(function () use ($data) { で囲むと次のようなエラーが表示されてしまいます。 ``` Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given ``` 一応このエラーが表示されていても、データの挿入はできています。 しかしエラー画面に進んでしまうので直さなければいけないのですが、どうすればいいでしょうか? どなたか分かる方がいれば教えていただきたいです。よろしくお願いします。 〜追記〜 テーブルの定義 users id, name, email, password, created_at, updated_at user_details id, users_id, follows_id, image, introduction, area, created_at, updated_at
回答: トリガーで別テーブルにINSERTする方法があります。AFTER INSERT Trigger これはOracleでのサンプルです。データベースによって記述が違います。