Laravel 4.2 スキーマビルダー

イントロダクション

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_atupdate_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'));
});

存在チェック

テーブルの存在をチェックする

hasTablehasColumnを使用し簡単にテーブル、カラムが存在するかチェックできます。

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"テーブルから基本インデックスを削除

タイムスタンプとソフトデリートフィールド削除

timestampsnullableTimestampssoftDeletesの絡むタイプを削除するためには、以下のメソッドが使用できます。

コマンド 説明
$table->dropTimestamps(); created_atupdate_atカラムの削除
$table->dropSoftDeletes(); deleted_atカラムの削除

ストレージエンジン

テーブルにストレージエンジンを設定するには、engineプロパティーをスキーマビルダーにセットしてください。

Schema::create('users', function($table)
{
    $table->engine = 'InnoDB';

    $table->string('email');
});

ドキュメント章別ページ

Artisan CLI

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる