LaravelでインサートしたLastInsertIDを取得する方法

シェアする

IT・Web業界での転職への転職を考えていれば⇨IT・Web業界での転職なら【レバテックキャリア】

Laravel5でEloquent ORMで実行した最後にinsertされたIDを取得する必要がある際があると思います。

今回の記事では、Laravel5でEloquent ORM・Query Builderで実行したLastInsertIDの取得する方法を紹介します。

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を取得するだけでもこれだけの種類があります。
どれか一つは覚えておくと良いと思います。