Laravel5でEloquent ORMで実行した最後にinsertされたIDを取得する必要がある際があると思います。
今回の記事では、Laravel5でEloquent ORM・Query Builderで実行したLastInsertIDの取得する方法を紹介します。
Contents
save()メソッドを使用している場合
save()メソッドを使用して、テーブルにinsertしている際には、下記のようにするとLastInsertIDを取得することが出来ます。
idがUserモデルの主キーとした場合、上記のように記載することで最後にinsertしたIDを取得することが出来ます。
create()メソッドを使用している場合
こちらもsave()メソッドを使用した場合と同様にLastInsertIDを取得することが出来ます。
insertGetId()メソッドを使用する方法
DBにインサートするのにDB classを使用している場合、insertGetId()メソッドを使用してLastInsertIDを取得する方法もあります。
この方法では、insertGetId()メソッドを使用することで、データをinsertしつつ、LastInsertIDを取得することが出来ます。
lastInsertId()メソッドを使用する方法
lastInsertId()メソッドを使用してLastInsertIDを取得する方法もあります。
しかし、一つ気をつけないといけないことがあります。それは、PDO objectを使用する必要があることです。
lastInsertId()メソッドを使用する場合は、DB::getPdo()->lastInsertId()のように記載することでLastInsertIDを取得することが出来ます。
番外
LastInsertIDを取得したいテーブルを降順に並べて、autoincrementしている主キーの一番大きいidを最後にinsertされたidと判断する方法もあります。
一応、例として示しますが、この方法は必ずしも安全ではありません。
最後にテーブルに追加された主キーの値を返すこともありますが、複数のクライアントがデータベースにレコードを追加するという環境では 安全ではありません。 つまり、データを追加してから MAX(id) の値を取得するまでの間に 他のクライアントが別のデータを追加する可能性があるということです。
最後にinsertされたIDを取得するだけでもこれだけの種類があります。
どれか一つは覚えておくと良いと思います。