Laravelでは、idカラムのデータ型は unsignedBigIntegerを選択します。
マイグレーションファイルには、【$table->unsignedBigInteger(‘user_id’)】のように記述する必要があります。
リレーションなどで相手のidを入れたidカラムを作るときには、ご注意ください。
でもIDのデータ型って、integerでもよい気がしませんか?
実は、わたしは最初そう思いました。同じように「なぜ符号なしBIGINTのデータ型を使うべきなの?」と疑問に思う人のために、解説していきますね。
*本記事で使用するLaravelのバージョンはLaravel8です。
Laravelではidカラムのデータ型は【符号なしBIGINT】を使う理由
なぜidのデータ型はunsignedBigIntegerなのか。
これは、下記のLaravelの公式マニュアルを検索すると分かります。
ただしすぐには分からず、3ステップの検索が必要です。
1回目の検索:$table->id
まずは公式マニュアルを開きます。
マイグレーション時にデータ型を調べるときは、このページの【使用できるカラムタイプ】を参照します。
一番上には 【$table->id();】とあります。
つまり、idのデータ型には、これが使われているのです。
なお説明欄には【 $table->bigIncrements(‘id’)の別名】とあります。
2回目の検索:$table->bigIncrements(‘id’)
【$table->bigIncrements(‘id’)】を検索してみると、2つほど下に、該当するものがありました。
自動増分というのは、自動で連番が割り振られていくということ。
デフォルトで使うidであればよいのですが、自分でid番号をつけたいときには使いにくいですね。そこで、もうちょっと調べてみることにします。
3回目の検索:符号なしBIGINT
2回目の検索結果で、idには【符号なしBIGINT】と使用せねばならないことは分かりました。
そこで【符号なしBIGINT】で検索をかけてみます。
すると、次のようなデータ型がありました。
つまり、これが使うべきデータ型になります。
マイグレーションファイルでは、たとえば【user_id】カラムに、次のような感じでデータ型を指定します。
1 |
$table->unsignedBigInteger('user_id'); |
符号なしBIGINTとは?
符号なしBIGINTは、ものすごい量を格納できるデータ型です。どれぐらいの量が可能か、ざっくり解説しますね。
BIGINTとは、BigIntegerの略。値の範囲は、次のとおりです。
さらに 符号なしBIGINTとは、マイナス部分がないBIGINT、ということ。
つまりマイナス部分で使うべき部分も利用できるので、そのぶん、格納できる量が増えます。具体的には、次のとおりです。
多すぎて口頭で読み上げられないぐらい・・・。
スゴイ量のデータが格納できますね。
おまけ:foreignId() でもOK
なおunsignedBigIntegerではなく、foreignId()メソッドを使うことも可能です。Laravelの公式マニュアルには次のように書かれています。
foreignIdメソッドはunsignedBigIntegerメソッドのエイリアスです。
$table->foreignId(‘user_id’);
参考:https://readouble.com/laravel/8.x/ja/migrations.html#column-method-foreignId
まとめ
今回のまとめ
idカラムでは、データ型は符号なしBIGINTを使う
理由は公式マニュアルを3ステップで検索すると分かる
「少しスッキリした!」と感じてもらえたら嬉しいです。
データ型のこととか、慣れないうちは何を使ってよいか分からず、困りますよね。
「データ型や、Laravelでデータベースを作成する方法を知りたい」という人向けに、学習サイト「初心者のためのLaravelの教科書」にて、Laravelの使い方をいちから解説しています。
登録は無料です。興味があったら、下記をクリックして詳細を見てみてくださいね。