3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mysqlとlaravelで文字列の自動採番実装した時のメモ

Posted at

はじめに

mysqlとlaravelで文字列としてオートインクリメントな自動採番を実装する際に少し詰まったのでそれをメモしていきたいと思う

目次

  1. 前提の仕様
  2. 調べて分かったこと
  3. 解決方法
  4. 参考文献

前提の仕様

・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を左詰め。

参考文献

3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?