laravel5.1でのデータベース定義(スキーマビルダー&migrationの使い方)
Laravel5.1では、以下の手順でDB生成を行う
1, php artisan make:migrationコマンドで、DB定義ファイルを生成
2, databases/migrationsに生成されたDB定義ファイルに、フィールド定義を記述
3, php artisan migrationコマンドで、MySQL等に実装(CREATE TABLE文)
// ↑↑↑↑ここまでテーブル定義。
// ↓↓↓↓ここからINSERTするレコード定義
4, php artisan make:seederコマンドで、レコード定義ファイルを生成
5, database/seedsに生成されたレコード定義ファイルに、挿入するデータを記述
6, php artisan db:seedコマンドでレコード生成(INSERT文)
1, DB定義ファイルを生成(–create=が実際のテーブル名)
1 2 3 |
# DB定義ファイルを生成(your_project/databases/migrationsに生成) php artisan make:migration create_persons_table --create=persons Created Migration: 2015_12_07_042605_create_persons_table |
2, databases/migrationsに生成されたDB定義ファイルに、フィールド定義を記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreatePersonsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('persons', function (Blueprint $table) { $table->primary('id')->comment('主キーを追加'); $table->string('name')->comment('VARCHAR(255)カラム'); $table->unique('email')->comment('ユニークキーを追加'); $table->text('content')->comment('TEXTカラム'); $table->integer('age')->comment('INTEGERカラム'); $table->date(‘birthday’)->comment('dateカラム'); $table->boolean('confirmed')->comment('BOOLEANカラム'); $table->timestamps()->comment('created_atとupdate_atカラムの追加(defualt=null)'); $table->softDeletes()->comment('ソフトデリートのためのdeleted_atカラム追加'); }); // スキーマビルダーではテーブル自体のコメントは出来ない?のでSQL文で実行 DB::statement("ALTER TABLE ".DB::getTablePrefix()."persons COMMENT '名簿テーブル'"); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('persons'); } } |
フィールドの型
http://readouble.com/laravel/5/0/0/ja/schema.html
コマンド 説明
$table->bigIncrements(‘id’); BIGINTを使用した自動増分ID
$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’, [‘foo’, ‘bar’]); ENUMカラム
$table->float(‘amount’); FLOATカラム
$table->increments(‘id’); 自動増分ID(主キー)
$table->integer(‘votes’); INTEGERカラム
$table->json(‘options’); JSONフィールド
$table->jsonb(‘options’); JSONBフィールド
$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を符号なしにする
// インデックス系
コマンド 説明
$table->primary(‘id’); 主キーを追加
$table->primary([‘first’, ‘last’]); 複合キーを追加
$table->unique(‘email’); ユニークキーを追加
$table->index(‘state’); 基本的なインデックスを追加
よく使う型(コメントも付与できる)
$table->increments(‘id’)->comment(‘自動増分ID(主キー)’);
$table->string(‘name’)->comment(‘VARCHAR(255)カラム’);
$table->string(‘email’)->comment(‘index系はtext不可’);
$table->unique(‘email’)->comment(‘ユニークキーを追加’);
$table->text(‘content’)->comment(‘TEXTカラム’);
$table->integer(‘age’)->comment(‘INTEGERカラム’);
$table->boolean(‘confirmed’)->comment(‘BOOLEANカラム’);
// システム系なので、コメントがエラーになる
$table->timestamps(); // ->comment(‘created_atとupdate_atカラムの追加(defualt=null)’);
$table->softDeletes(); //->comment(‘ソフトデリートのためのdeleted_atカラム追加’);
3, php artisan migrationでMySQLなどに実装する
# 上記のDB定義ファイルに従って、MySQLにテーブル生成を行う。
1 |
php artisan migration |
4, php artisan make:seederコマンドで、レコード定義ファイルを生成
1 |
php artisan make:seeder PersonSeeder |
5, database/seedsに生成されたレコード定義ファイルに、挿入するデータを記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php use Illuminate\Database\Seeder; class PersonSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { ///////////////ここから///////////// // 全消し // DB::table('persons')->delete(); // とりあえず1件だけ DB::table('persons')->insert([ 'name' => "suzuki", 'email' => "inoue@gmail.com", 'content' => "hello, world", 'age' => 17, 'confirmed' => true, ]); ///////////////ここまで///////////// } } |
database/seeds/DatabaseSeeder.php(最初からある)にSeedingしたいファイルを追加する
1 2 |
// $this->call(UserTableSeeder::class); $this->call(PersonSeeder::class); |
6, php artisan db:seedコマンドでレコード生成(INSERT文)
これで実際のMySQLにレコードが一件追加されているはず。