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値が登録可能です
Author And Source
この問題について(Laravel で auto increment 値を取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/hotate_chan/items/74f4275f2484a33d2c5e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .