LOG

Laravel5 マイグレーションの操作

公式ほぼ引用

テーブル操作を行うにはSchemaクラスを使う。
マイグレーションの作成は「Laravel5 マイグレーションの作成


テーブルの作成

Schema::create('users',function(Blueprint $table)
{
    $table->increments('id');
});

テーブルのリネーム

Schema::rename($from,$to);

テーブルのコネクション指定

コネクションはconfig/database.phpとかで指定してると思う。

Schema::connection('mysql')->ccreate('users',function(Blueprint $table)
{
    $table->increments('id');
});

テーブルの削除(ドロップ)

Schema::drop('users');

// テーブルがある場合だけ実行
Schema::dropIfExists('users');

テーブルの更新

Schema::table('users',function()
{
    $table->string('email');
});

カラムの種類

カラムタイプ種類
$table->bigIncrements(‘id’);BIGINTを使用した自動増分IDGoogle 検索
$table->bigInteger(‘votes’);BIGINTカラム
$table->binary(‘data’);BLOBカラムGoogle 検索
$table->boolean(‘confirmed’);BOOLEANカラムGoogle 検索
$table->char(‘name’, 4);CHARカラムGoogle 検索
$table->date(‘created_at’);DATEカラムGoogle 検索
$table->dateTime(‘created_at’);DATETIMEカラムGoogle 検索
$table->decimal(‘amount’, 5, 2);有効/小数点以下桁数指定のDECIMALカラムGoogle 検索
$table->double(‘column’, 15, 8);15桁、小数点以下8桁のDOUBLEカラムGoogle 検索
$table->enum(‘choices’, [‘foo’, ‘bar’]);ENUMカラムGoogle 検索
$table->float(‘amount’);FLOATカラムGoogle 検索
$table->increments(‘id’);自動増分ID(主キー)Google 検索
$table->integer(‘votes’);INTEGERカラムGoogle 検索
$table->json(‘options’);JSONフィールドGoogle 検索
$table->jsonb(‘options’);JSONBフィールドGoogle 検索
$table->longText(‘description’);LONGTEXTカラムGoogle 検索
$table->mediumInteger(‘numbers’);MEDIUMINTカラムGoogle 検索
$table->mediumText(‘description’);MEDIUMTEXTカラムGoogle 検索
$table->morphs(‘taggable’);INTERGERの「taggable_id」と文字列の「taggable_type」を追加
$table->nullableTimestamps();NULL値を許す以外、「timestamps()」と同じ
$table->smallInteger(‘votes’);SMALLINTカラムGoogle 検索
$table->tinyInteger(‘numbers’);TINYINTカラムGoogle 検索
$table->softDeletes();ソフトデリートのためのdeleted_atカラム追加
$table->string(‘email’);VARCHARカラムGoogle 検索
$table->string(‘name’, 100);長さ指定のVARCHARカラム
$table->text(‘description’);TEXTカラムGoogle 検索
$table->time(‘sunrise’);TIMEカラムGoogle 検索
$table->timestamp(‘added_on’);TIMESTAMPカラムGoogle 検索
$table->timestamps();created_atとupdate_atカラムの追加
$table->rememberToken();VARCHAR(100) NULLの「remember_token」を追加

引用:Laravel 5.1 データベース:マイグレーション

カラムの追加操作みたいな位置づけで以下のような操作ができる。

カラム修飾子説明
->first()カラムをテーブルの最初(first)に設置する(MySQLのみ)
->after(‘column’)指定カラムの次にカラムを設置する(MySQLのみ)
->nullable()カラムにNULL値を許す
->default($value)カラムのデフォルト(default)値設定
->unsigned()整数(integer)を符号(unsigned)

引用:Laravel 5.1 データベース:マイグレーション

$table->char('first_name', 4)->first();
$table->char('last_name', 4)->nullable()->first();

みたいな感じで使う。


カラムの変更

カラムを操作をするには「doctrine/dbal」が必要らしいので入ってなければ入れとく

composer require doctrine/dbal --dev

カラムの属性変更

// 文字列のサイズを変更
Schema::table('users', function ($table) {
    $table->string('name', 50)->change();
});

// 文字列のサイズを変更してnullを可能に変更
Schema::table('users', function ($table) {
    $table->string('name', 50)->nullable()->change();
});

カラム名変更

Schema::table('users', function ($table) {
    $table->renameColumn('from', 'to');
});

カラム削除

カラム操作には「doctrine/dbal」以下略

Schema::table('users', function ($table) {
    // 1カラム削除
    $table->dropColumn('votes');
    // 複数のカラム削除 ! SQL Liteは出来ない !
    $table->dropColumn(['votes', 'avatar', 'location']);
});

インデックスの作成

    // 定義してインデックス作成
    $table->string('email')->unique();

    // 定義して後からインデックス作成
    $table->unique('email');

    // 複合インデックス
    $table->index(['account_id', 'created_at']);
インデックスタイプ
$table->primary(‘id’);主キー追加
$table->primary([‘first’, ‘last’]);複合キー追加
$table->unique(‘email’);uniqueキー追加
$table->index(‘state’);基本的なインデックス追加

インデックスの削除

インデックスの削除は
「テーブル名カラム名インデックスの種類」を1つの文字列として繋げて指定する

$table->dropPrimary('users_id_primary');
$table->dropUnique('users_email_unique');
$table->dropIndex('geo_state_index');

外部キーの追加

Schema::table('posts', function ($table) {
    // 整数(integer)を符号(unsigned)
    $table->integer('user_id')->unsigned();

    // 外部キー指定をして参照先をusersテーブルのidカラムにする
    $table->foreign('user_id')->references('id')->on('users');
});

外部キーの削除

インデックスの削除とルールは同じ
「テーブル名_カラム名_foreign」

$table->dropForeign('posts_user_id_foreign');