データベースのカラムの設定(マイグレーションファイル) まとめ

2019/03/06

Laravel ではマイグレーションという便利な機能(データベースを管理する機能)が用意されています。

カラムの追加や削除はマイグレーションファイルで行います。

しかし、毎回、書き方を忘れてしまうんですよね。

そんなわけで、今回はマイグレーションファイルにおけるカラムの設定についてまとめました。

 
INDEX

 

書式

基本

例:nameカラムのデータ型を 「varchar」 に設定


$table->string('name');

 

カラム属性の変更

chengeメソッドは存在するカラムを新しいタイプへ変更するか、カラムの属性を変更します。

例:nameのカラムのサイズを25から50へ変更


$table->string('name', 50)->change();

例:さらにNULL値を設定可能にする


$table->string('name', 50)->nullable()->change();

ポイント

down() では NULL を許容しない制約を記述することになります。
しかし NULL を禁止するメソッドは用意されていないため、SQL を直接書くことになります。


public function down()
{
  Schema::table('users',function(Blueprint $table){
    // 5.5以前
    DB::statement('ALTER TABLE users MODIFY name VARCHAR NOT NULL;');
    // 5.5以降は以下の記述ができます。
    // $table->string('name')->nullable(false)->change();
    });
  }
}

 

カラムの削除

ロールバックの項目( down() )でよく使います。


$table->dropColumn('name');

ポイント

dropColumnメソッドにカラム名の配列を渡せば、複数のカラムをドロップできます。


$table->dropColumn(['zip', 'country' , 'address']);

 

カラムの設定

データ型
メソッド 説明
increments('id') 「符号なしINT」を使用した自動増分ID(主キー)
boolean('カラム名') 真偽値カラム
integer('カラム名') 数値データカラム ※デフォルト11文字

   
   $table->integer('product_code');
   
   
tinyInteger('カラム名') TINYINTカラム
bigInteger('カラム名') BIGINTカラム
string('カラム名') VARCHARカラム ※デフォルト255文字
string('カラム名', 長さ) 長さ指定の VARCHAR カラム

   
   $table->string('name',100);
   
   
timestamps() created_at と update_at カラム
text('カラム名') TEXTカラム
softDeletes() ソフトデリートのためのNULL値可能な deleted_at カラム追加

   
   $table->softDeletes();
   
   
ポイント
int型の入力可能桁数
バイト 最小値 最大値
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807

 

オプション
オプション 説明
comment('コメント内容') カラムにコメントを追加

   
    $table->string('name')->comment('なまえ');
   
   
nullable() カラムにNULL値を許す

   
    $table->text('memo')->nullable();
   
   
unsigned() 符号なし(unsigned)属性を付与する。

   
   // 外部キー設定のときによく使います。
   $table->integer('user_id')->unsigned();
   
   
default('値') カラムのデフォルト値を設定

   
   $table->integer('sort_order')->unsigned()->default(0)->comment('並び順');
   
   
after('カラム名') 指定したカラムの次にカラムを追加します。
(※ MySQLのみの仕様です。)

   
   # id カラムのあとに user_id カラムを追加
   $table->integer('user_id')->after('id');
   
   

 

インデックス
インデックス 説明
index('カラム名') カラムにインデックスを追加

   
    $table->integer('category_id')->index('category_id');
   
   
unique('email') カラムにユニークキーを追加

   
    $table->string('email')->unique('email');
   
   
unsigned() 符号なし(unsigned)属性を付与する。

   
   // 外部キー設定のときによく使います。
   $table->integer('user_id')->unsigned();
   
   

 
また、何か発見したら追記していこうと思います。

以上です。

本庄マサノリ

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

 

-周辺知識