Laravel で auto increment 値を取得する


今まで以下の方法でテーブルのID最大値を取得してました

$maxId = Users::max('id') + 1;

もしくは

$maxId = DB::table('users')
          ->select('id')
          ->oredrby('id', 'desc')
          ->first()->id;

前者はテーブルのレコード数が大量になると遅くなるので、データが大量になる場合は後者を使ってました。

が、エラーなど起こってデータがロールバックされた場合抜け番が生じます。
その結果、子テーブルがある場合データの不整合が起きます。
どういう事かというと

なので、以下のクエリでauto increment値を取得

SELECT
 AUTO_INCREMENT
FROM
 INFORMATION_SCHEMA.TABLES
WHERE
 TABLE_SCHEMA = 'DB名'
 AND TABLE_NAME = 'テーブル名'
;

Laravelであれば

$maxId = DB::table("INFORMATION_SCHEMA.TABLES")
            ->select("AUTO_INCREMENT")
            ->where("TABLE_SCHEMA", "DB名")
            ->where("TABLE_NAME", "テーブル名")
            ->first()->AUTO_INCREMENT;

これで子テーブルでもauto increment値が登録可能です