Laravel 実装のちょっとメモです。

LAST INSERT IDとは

LAST INSERT ID とは オートインクリメントによって自動生成された値 を指します。

PostgreSQL では INSERT 実行前にオートインクリメントキーの実値を確保することができます。

これに対し MySQL は INSERT を実行するまでオートインクリメントキーが確定しませんので、ちょっとした手間がかかります。

具体例として PHP マニュアル掲載のコードを引用します。

 1<?php
 2$link = mysqli_connect("localhost", "my_user", "my_password", "world");
 3:
 4
 5:
 6mysqli_query($link, "CREATE TABLE myCity LIKE City");
 7
 8$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
 9mysqli_query($link, $query);
10
11printf ("New Record has id %d.\n", mysqli_insert_id($link)); // New Record has id 1.
12

PHPマニュアル - mysqli_insert_id
http://php.net/manual/ja/mysqli.insert-id.php

[ VALUES (NULL, ] が、オートインクリメントキーに相当する箇所です。

NULL 、、、
NULL はホント、困ります。

繰り返しになりますが、オートインクリメントキーは MySQL が採番を担当するため、 INSERT が完了するまでその値が分かりません
そのため、INSERT 後に「今扱ったオートインクリメントキー」を問い合わせます。

上記のサンプルでは mysqli_insert_id() が、その問い合わせを行っている箇所です。

Eloquen ORM では

save() するだけでオートインクリメントキーにアクセスできます。

1<?php
2
3$user = new User();
4$user->name  = "atuweb";
5$user->email = "info@example.com";
6$user->save();
7
8$last_insert_id = $user->id;
9

簡単、楽勝です!

おわりに

Laravel の Eloquen ORM では save() するだけで LAST INSERT ID を扱うことができます!

stackoverflow の以下も参考にどうぞ。

stackoverflow
Laravel, get last insert id using Eloquent
http://stackoverflow.com/questions/21084833/laravel-get-last-insert-id-using-eloquent

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

竹澤 有貴,栗生 和明,新原 雅司,大村 創太郎
出版社:ソシム  発売日:2018-09-26

Amazonで詳細を見る

PHPフレームワーク Laravel入門

掌田津耶乃
出版社:秀和システム  発売日:2017-09-16

Amazonで詳細を見る

初めてのPHP

David Sklar
出版社:オライリージャパン  発売日:2017-03-18

Amazonで詳細を見る