はじめに
mysqlとlaravelで文字列としてオートインクリメントな自動採番を実装する際に少し詰まったのでそれをメモしていきたいと思う
目次
前提の仕様
・IDとは別で自動採番する必要のあるカラム「hoge」があった
・「hoge」カラムはmysql側でvarchar型として保存されている
・1から順に数を増やして登録していくが、「’001’」,「’002’」といった形式で行う
調べて分かったこと
まず最初にmysql側でオートインクリメントで登録できないかと考えたが、それができるのは数値(int)で登録しているカラムのみで、できないようだった。
なので自動採番のロジックはlaravel側で行うのが最も良さそう。
また、ロジックにおいては、DBの「hoge」カラムから最大値をとって、プラス1して0を左詰めするやり方で実装できそうだった。
最大値はmax関数を使うことができた。
以下、まとめ
・mysql側でのオートインクリメントは数値しか扱えない
・↑なので文字列でのオートインクリメント自動採番はlaravel側で実装する必要がある
・laravel(php)で、varchar型のカラムに対してでもクエリビルダのmax関数が使える
解決方法
mysqlの設定はそのままで、laravel側の保存処理に自動採番ロジックを加えた。
以下ロジック
$hoge_max = DB::table('tbl_hoge')->max('hoge');
$hoge_id = str_pad($hoge_max + 1, 3, 0, STR_PAD_LEFT);
上記は、最初に「hoge」カラムの最大値を取得している。
その後にその数値プラス1をして、STR_PADで0を左詰め。