現在、usersテーブルに新しい行がinsertされた時に、user_detailsテーブルに同時に新しい行をinsertしようとしています。
やりたいこととしては、ユーザーがアカウント登録をすると、usersテーブルにid, name, email, passwordのカラムを持ったデータをinsertし、それと同時にuser_detailsテーブルのusers_idカラムにusersテーブルのidと同じ値を入れるということです。
コードは以下のように書いています。
php
1 protected function create(array $data) 2 { 3 DB::transaction(function () use ($data) { 4 DB::table('user_details')->insert(['users_id' => DB::table('users')->count() + 1]); 5 6 return User::create([ 7 'name' => $data['name'], 8 'email' => $data['email'], 9 'password' => bcrypt($data['password']), 10 ]); 11 }); 12 }
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
回答2件
あなたの回答
tips
プレビュー