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.
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;
簡単、楽勝です!
おわりに
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
Laravel, get last insert id using Eloquent
http://stackoverflow.com/questions/21084833/laravel-get-last-insert-id-using-eloquent