前提・実現したいこと
お世話になります。
LaravelでDBへ新規保存後にinsertしたIDを取得したいのですが、DBへの保存は成功していますがIDの取得結果が「0」になってしまいます。
いくつか試みたパターンと、デバッグ結果をコメントで記載いたします。(自分でもわけがわからなくなり、変な値アクセスもありますがご容赦ください)
対象のテーブルのIDは、通常の符号なし整数のAUTO_INCREMENTカラムです。
他に必要な情報がございましたら、追記していきますので、何卒ご教授の程、宜しくお願い致します。
試した保存パターン
MariaDB
1/* テーブルcreate文 */ 2CREATE TABLE `samples` ( 3 `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT 4 /* 以下、省略 */
Laravel
1// Laravel SampleController 2 $data = ['data' => 'hoge']; 3 4 // パターン1 5 $res = $this->sampleRepository->create($data); 6 dump($res->id); // 0 7 dump($res->lastInsertId); // null 8 dump($res->insertGetId); // null 9 exit; 10 11 // パターン2 12 $model = new Sample(); 13 $model->data = 'hoge'; 14 $res = $model->save(); 15 dump($res); // true 16 dump($model->id); // 0 17 dump($model->lastInsertId); // null 18 dump($model->insertGetId); // null 19 exit; 20 21 // パターン3 22 $res = DB::table('samples')->insert($data); 23 dump($res); // true 24 $res = DB::table('samples')->insertGetId($data); 25 dump($res); // "0" 26 $id = DB::getPdo()->lastInsertId(); 27 dump($id); // 0 28 exit; 29 30 // パターン4 31 $res = Sample::create($data); 32 dump($res->id); // 0 33 dump($res->lastInsertId); // null 34 dump($res->insertGetId); // null 35 exit;
ご指摘がありましたので、2回連続で保存を行ってみましたところ、2回目の処理だとIDが取得できていました。
上記サンプル時にも試していましたが、リロードしても同様の結果です。
下記サンプルでは、1回目のcreate結果が0、2回目のcreate結果がID取得となりました。
ただ、これでは2回保存を行っているので、片方は不要なデータになってしまいます。
Laravel
1 2 // パターン1 3 $res = $this->sampleRepository->create($data); 4 dump($res->id); // 0 5 $res2 = $this->sampleRepository->create($data); 6 dump($res2->id); // AUTO_INCREMENTのIDが取得できた! 7 exit;
補足情報
バージョン
Laravel Framework 6.11.0
回答1件
あなたの回答
tips
プレビュー