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の以下も参考にどうぞ。

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