イントロダクション
LaravelのSchema
クラスは、データテーブルに不可知論的なテーブル操作方法を提供しています。これはLaravelがサポートしている全てのデータベースで上手く動作し、共通のAPIを持っています。
テーブル作成/削除
テーブルを作成するには、Schema::create
メソッドを使用します。
Schema::create('users', function($table)
{
$table->increments('id');
});
create
メソッドの最初の引数はテーブル名で、2つ目は無名関数です。新しいテーブルを定義するためのBlueprint
オブジェクトを取ります。
存在しているテーブルの名前を変更するにはrename
メソッドを使用してください。
Schema::rename($from, $to);
スキーマ操作のコネクションを指定するには、Schema::connection
メソッドを最初に使用します。
Schema::connection('foo')->create('users', function($table)
{
$table->increments('id');
});
テーブルをドロップするためには、Schema::drop
メソッドを使用します。
Schema::drop('users');
Schema::dropIfExists('users');
カラム追加
既に存在するテーブルを更新するには、Schema::table
メソッドを使用します。
Schema::table('users', function($table)
{
$table->string('email');
});
テーブルビルダーは構築に使用する様々なカラムのタイプで構成されています。
コマンド | 説明 |
---|---|
$table->bigIncrements('id'); |
idをBIG INTEGERで作成 |
$table->bigInteger('votes'); |
BIGINTカラム |
$table->binary('data'); |
BLOBカラム |
$table->boolean('confirmed'); |
BOOLEANカラム |
$table->char('name', 4); |
CHARカラム |
$table->date('created_at'); |
DATEカラム |
$table->dateTime('created_at'); |
DATETIMEカラム |
$table->decimal('amount', 5, 2); |
有効/小数点以下桁数指定のDECIMAL |
$table->double('column', 15, 8); |
15桁、小数点以下8桁のDOUBLEカラム |
$table->enum('choices', array('foo', 'bar')); |
ENUMカラム |
$table->float('amount'); |
FLOATカラム |
$table->increments('id'); |
テーブルのインクリメンタルID(主キー) |
$table->integer('votes'); |
INTEGERカラム |
$table->longText('description'); |
LONGTEXTカラム |
$table->mediumInteger('numbers'); |
MEDIUMINTカラム |
$table->mediumText('description'); |
MEDIUMTEXTカラム |
$table->morphs('taggable'); |
INTERGERのtaggable_id と文字列のtaggable_type を追加 |
$table->nullableTimestamps(); |
NULL値を許す以外、timestamps() と同じ |
$table->smallInteger('votes'); |
SMALLINTカラム |
$table->tinyInteger('numbers'); |
TINYINTカラム |
$table->softDeletes(); |
ソフトデリートのためのdeleted_atカラム追加 |
$table->string('email'); |
VARCHARカラム |
$table->string('name', 100); |
長さ指定のVARCHARカラム |
$table->text('description'); |
TEXTカラム |
$table->time('sunrise'); |
TIMEカラム |
$table->timestamp('added_on'); |
TIMESTAMPカラム |
$table->timestamps(); |
created_atとupdate_atカラムの追加 |
$table->rememberToken(); |
VARCHAR(100) NULLのremember_token を追加 |
->nullable() |
カラムにNULL値を許す |
->default($value) |
カラムのデフォルト値設定 |
->unsigned() |
INTEGERを符号なしにする |
MySQLでafterメソッドを使用する
MySQLデータベースをお使いでしたら、after
メソッドでカラムの順番を指定することができます。
$table->string('name')->after('email');
カラム名変更
カラム名を変更するためにはrenameColumn
メソッドをスキーマビルダーで使用してください。カラム名を変更する前に、composer.json
ファイルでdoctrine/dbal
を依存パッケージとして追加済みであることを確認してください。
Schema::table('users', function($table)
{
$table->renameColumn('from', 'to');
});
注目:
enum
カラムタイプのリネームはサポートしていません。
カラム削除
カラムをドロップするには、スキーマビルダーのdropColumn
メソッドを使用します。カラムをドロップする前に、composer.json
ファイルへdoctrine/dbal
依存パッケージを確実に追加してください。
データベーステーブルからカラムをドロップする
Schema::table('users', function($table)
{
$table->dropColumn('votes');
});
データベーステーブルから複数のカラムをドロップする
Schema::table('users', function($table)
{
$table->dropColumn(array('votes', 'avatar', 'location'));
});
存在チェック
テーブルの存在をチェックする
hasTable
やhasColumn
を使用し簡単にテーブル、カラムが存在するかチェックできます。
if (Schema::hasTable('users'))
{
//
}
カラムの存在をチェックする
if (Schema::hasColumn('users', 'email'))
{
//
}
インデックス追加
スキーマビルダーは様々なインデックスタイプをサポートしています。追加方法は2つあります。カラムの定義と同時に記述する方法と、後から追加する方法です。
$table->string('email')->unique();
もしくは、別の行でインデックスを追加することを選べます。指定可能なインデックスタイプの一覧です。
コマンド | 説明 |
---|---|
$table->primary('id'); |
主キーを追加 |
$table->primary(array('first', 'last')); |
複合キーを追加 |
$table->unique('email'); |
ユニークキーを追加 |
$table->index('state'); |
基本的なインデックスを追加 |
外部キー
Laravelはテーブル対する、外部キー束縛の追加も提供しています。
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
この例では、user_id
カラムがusers
テーブルのid
カラムを参照していることを宣言しています。外部キーカラムを最初に作成するのを忘れないでください。
さらに束縛に対して「デリート時(on delete)」と「更新時(on update)」に対する処理をオプションとして指定できます。
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
外部キーを削除するには、dropForeign
メソッドを使用します。他のインデックスで使用されるものと似た命名規則が外部キーにも使用されています。
$table->dropForeign('posts_user_id_foreign');
注目:自動増分する整数として参照される外部キーを作成する場合、外部キーの項目作成時はいつでも
unsigned
を付けるのをお忘れなく。
インデックス削除
インデックスを削除する場合、インデックスの名前を指定します。Laravelはデフォルトで意味が通る名前をインデックスに付けます。シンプルにテーブル名、カラム名、インデックスタイプをつなげたものです。いくつか例をご覧ください。
コマンド | 説明 |
---|---|
$table->dropPrimary('users_id_primary'); |
"users"テーブルから主キーを削除 |
$table->dropUnique('users_email_unique'); |
"users"テーブルからユニークキーを削除 |
$table->dropIndex('geo_state_index'); |
"geo"テーブルから基本インデックスを削除 |
タイムスタンプとソフトデリートフィールド削除
timestamps
、nullableTimestamps
、softDeletes
の絡むタイプを削除するためには、以下のメソッドが使用できます。
コマンド | 説明 |
---|---|
$table->dropTimestamps(); |
created_atとupdate_atカラムの削除 |
$table->dropSoftDeletes(); |
deleted_atカラムの削除 |
ストレージエンジン
テーブルにストレージエンジンを設定するには、engine
プロパティーをスキーマビルダーにセットしてください。
Schema::create('users', function($table)
{
$table->engine = 'InnoDB';
$table->string('email');
});