Laravel5/Migrate

Laravel5/Migrate

Migrate する

.env の対象に対して Migration(テーブル構築とデータツッコミ)を行う

$ php artisan migrate

実行される予定のSQLを確認する

pretend オプションをつけることによって、実行される予定のSQLがどのようなものか確認できる。

$ php artisan migrate --pretend

確認だけなので実際には実行されない。

スキーマを定義する

定義ファイルの生成

コマンドから migrate で使う定義ファイルを生成することができる

$ php artisan make:migration hogehoge

実行すると。

database/migrations/2015_06_11_113528_hogehoge.php

のようなタイムスタンプ+指定した名前のようなファイルが生成される。

このファイル名の昇順で migrate 順が決まる。hogehoge の部分は任意なので何か内容を端的に表したものにしたほうが良いだろう

テーブルを作成する場合

テーブルを作成する定義を作成する場合はオプションをつけて

$ php artisan make:migration hogehoge --create=hoges

このように行うとこのように作成と削除の雛形が埋め込まれた状態で生成される

    public function up()
    {
        Schema::create('hoges', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::drop('hoges');
    }

定義ファイルの構成

定義ファイル内容は

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
 
class Hogehoge extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('employee', function(Blueprint $table){
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
 
    }
 
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('employee');
    }
}

進める方向を記述する up と up の内容を取り消す down を作成する。

Blueprint クラスのメソッドとMySQLの対応

カラム定義

無指定だと基本的に not null 制約がくっつく

Laravel 5.0.16, MySQL 5.5.46

method MySQL memo
$table->increments('hoge')
`hoge` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
自動的にPKに確定
$table->bigIncrements('hoge');
`hoge` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
自動的にPKに確定
$table->bigInteger('hoge');
`hoge` BIGINT NOT NULL,
$table->binary('hoge')
`hoge` BLOB NOT NULL,
$table->boolean('hoge')
`hoge` tinyint(1) NOT NULL,
$table->char('hoge')
`hoge` CHAR(255) NOT NULL,
パラメータ無しの場合は255になる
$table->char('hoge', 5)
`hoge` CHAR(5) NOT NULL,
$table->date('hoge')
`hoge` DATE NOT NULL,
$table->dateTime('hoge')
`hoge` datetime NOT NULL,
$table->decimal('hoge')
`hoge` DECIMAL(8, 2) NOT NULL,
パラメータ無しなら 8,2 指定
$table->decimal('hoge', 6, 3)
`hoge` DECIMAL(6, 3) NOT NULL,
$table->enum('hoge', ['aaa', 'bbb', 'ccc'])
`hoge` enum('aaa', 'bbb', 'ccc') NOT NULL,
$table->float('hoge')
`hoge` DOUBLE(8, 2) NOT NULL,
$table->integer('hoge')
`hoge` INT NOT NULL,
$table->json('hoge')
`hoge` text NOT NULL,
$table->longText('hoge')
`hoge` longtext NOT NULL,
$table->mediumInteger('hoge')
`hoge` mediumint NOT NULL,
$table->mediumText('hoge')
`hoge` mediumtext NOT NULL,
$table->morphs('hoge')
`hoge_id` INT UNSIGNED NOT NULL,
なんだかよくわからないw
`hoge_type` VARCHAR(255) NOT NULL,
なんだかよくわからないw
$table->nullableTimestamps()
`created_at` TIMESTAMP NULL,
カラム名は固定
`updated_at` TIMESTAMP NULL,
カラム名は固定
$table->rememberToken()
`remember_token` VARCHAR(100) NULL,
カラム名は固定
$table->smallInteger('hoge')
`hoge` SMALLINT NOT NULL,
$table->softDeletes()
`deleted_at` TIMESTAMP NULL,
カラム名は固定
$table->string('hoge')
'hoge' VARCHAR(255) NOT NULL,
パラメータ指定無しなら255
$table->string('hoge', 100)
'hoge' VARCHAR(100) NOT NULL,
$table->text('hoge')
'hoge' text NOT NULL,
$table->time('hoge')
'hoge' TIME NOT NULL,
$table->tinyInteger('hoge')
'hoge' tinyint NOT NULL,
$table->timestamp('hoge')
'hoge' TIMESTAMP DEFAULT 0 NOT NULL,
$table->timestamps()
`created_at` TIMESTAMP DEFAULT 0 NOT NULL,
カラム名固定
`updated_at` TIMESTAMP DEFAULT 0 NOT NULL
カラム名固定
php/laravel/laravel5/migrate.txt · 最終更新: 2019-07-08 19:31 by ore