2022/05/25
Laravel ではマイグレーションという便利な機能(データベースを管理する機能)が用意されています。
カラムの追加や削除はマイグレーションファイルで行います。
しかし、毎回、書き方を忘れてしまうんですよね。
そんなわけで、今回はマイグレーションファイルにおけるカラムの設定についてまとめました。
INDEX
書式
基本
例:nameカラムのデータ型を 「varchar」 に設定
カラム属性の変更
chengeメソッドは存在するカラムを新しいタイプへ変更するか、カラムの属性を変更します。
例:nameのカラムのサイズを25から50へ変更
例:さらにNULL値を設定可能にする
down() では NULL を許容しない制約を記述することになります。
しかし NULL を禁止するメソッドは用意されていないため、SQL を直接書くことになります。
カラムの削除
ロールバックの項目( down() )でよく使います。
dropColumnメソッド
にカラム名の配列を渡せば、複数のカラムをドロップできます。
カラムの設定
データ型
メソッド | 説明 |
---|---|
increments('id') | 「符号なしINT」を使用した自動増分ID(主キー) |
unsignedBigInteger('user_id') / foreignId('user_id') | 外部キーのカラムを指定する場合は以下のように指定する。 |
boolean('カラム名') | 真偽値カラム ※フラグ関係のカラムはこれを使う |
integer('カラム名') | INT型(範囲:-2147483647〜2147483647 4バイト) |
tinyInteger('カラム名') | TINYINT型(範囲:0~255 1バイト) |
bigInteger('カラム名') | BIGINT型 |
string('カラム名') | VARCHAR型 ※デフォルト255文字 |
string('カラム名', 長さ) | 長さ指定の VARCHAR カラム |
timestamps() | created_at と update_at カラム |
text('カラム名') | TEXT型 |
softDeletes() |
ソフトデリートのためのNULL値可能な deleted_at カラム追加
|
int型の入力可能桁数
型 | バイト | 最小値 | 最大値 |
---|---|---|---|
TINYINT | 1 | -128 | 127 |
SMALLINT | 2 | -32768 | 32767 |
MEDIUMINT | 3 | -8388608 | 8388607 |
INT | 4 | -2147483648 | 2147483647 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
int(11)の 11 は、カラムの表示幅であり、データベースの運用上はあまり意味がありません。intのバイト数は、11 を 10 や 8 に変更しても4バイトであり、結局、2147483647まで格納が可能。
テキストデータ
type | 最大サイズ |
---|---|
varchar | VARCHAR の有効な最大長は、最大行サイズは65,535バイトです。UTF8を使用している場合は、1文字が最大3バイトになり、VARCHARに登録できる文字数は最大21,844文字となります。 |
text | 最大長が 65,535文字のテキストカラム。 |
MEDIUMTEXT | 文字型ラージオブジェクトカラム、最大長は 16,777,215 文字。 |
LONGTEXT | 文字型ラージオブジェクトカラム、最大長は 4,294,967,295 文字。 |
※ MySQL 4.1より前は、varchar(n)はバイト数でしたが、MySQL 4.1以降は、ユニコード等の実装に伴いマルチバイトも1文字とカウントする文字数になっています。つまり、varchar(255) は255文字。
オプション(カラム修飾子)
オプション | 説明 |
---|---|
comment('コメント内容') | カラムにコメントを追加 |
nullable() | カラムにNULL値を許す |
unsigned() | 符号なし(unsigned)属性を付与する。 |
default('値') | カラムのデフォルト値を設定 |
after('カラム名') |
指定したカラムの次にカラムを追加します。 (※ MySQLのみの仕様です。) |
インデックス
インデックス | 説明 |
---|---|
index('カラム名') | カラムにインデックスを追加 |
unique('email') | カラムにユニークキーを追加 |
unsigned() | 符号なし(unsigned)属性を付与する。 |
外部キーの作成
例:rolesテーブルの user_id を外部キーとしてusersテーブルと紐づける。
外部キーを設定しておくと、rolesテーブルの user_id
にusersテーブルの id
が自動で入ってくれます。
increments()で作ったusersテーブルのidカラム
にはunsined(符号無し)属性が付与されます。
役割テーブル(roles)のuser_id
にも同様の制約をつけないと形式の一致でエラーになります。
実例
また、何か発見したら追記していこうと思います。
以上です。

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。