前提
- Laravelにはマイグレーションというテーブル作成の補助をしてくれる機能があります
- この記事はマイグレーションの使い方とテーブル設計を行う上での備忘録です
- ゲームアプリを想定したテーブル設計を行う場合の備忘録です
基本知識
-
マイグレーションとは
- マイグレーションとはデータベースのバージョンコントロールのような機能です
- このファイルをメンバー同士で共有することでテーブルの変更などを容易に共有することができます
-
マイグレーションの使い方
- public function up()欄には変更を加える内容を記述します
- public function down()欄には変更を戻すための内容を記述します
マイグレーションのコマンド
// テーブルの作成時
php artisan make:migration create_テーブル名_table --create=テーブル名
// テーブルの修正時
php artisan make:migration hoge_テーブル名_table --table=テーブル名
// ファイルの実行(※仮想環境で実行)
php artisan migrate
// ロールバック(1段階の場合はオプションコマンドは不要、※仮想環境で実行)
php artisan migrate:rollback --step=5
// マイグレーションファイルの状況を確認
php artisan migrate:status
テーブルの変更時によく使うもの
- 作成カラム情報
項目 | 記載内容 |
---|---|
主キー | $table->increments('カラム名'); |
整数型 | $table->unsignedInteger('カラム名'); |
整数型 | $table->unsignedTinyInteger('カラム名'); |
整数型 | $table->unsignedBigInteger('カラム名'); |
文字列型 | $table->string('カラム名', 最大文字数); |
create_time | $table->timestamp('created_time')->default(\DB::raw('CURRENT_TIMESTAMP')); |
update_time | $table->timestamp('updated_time')->default(\DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP')); |
Nullを許可 | ->nullable(); |
コメント | ->comment('コメント'); |
主キー追加 | $table->primary('カラム名'); |
インデックスキー追加 | $table->index('カラム名','インデックスキー名'); |
ユニークキー追加 | $table->unique('カラム名','ユニークキー名'); |
- 対応表
項目 | up側に記載 | down側に記載 |
---|---|---|
カラムの追加 | カラムを追加(->after('カラム名')を付ける) | $table->dropColumn('カラム名'); |
カラムの削除 | $table->dropColumn('カラム名'); | カラムを追加(->after('カラム名')を付ける) |
カラム名の変更 | $table->renameColumn('変更前', '変更後'); | up()に記載したものと逆 |
ユニークキーの追加 | $table->unique('カラム名','ユニークキー名'); | $table->dropUnique('ユニークキー名'); |
インデックスキーの追加 | $table->index('カラム名','インデックスキー名'); | $table->dropIndex('インデックスキー名'); |
テーブル作成時の補足
-
型について
項目 型 時間関連 TIMESTAMP 文字 VARCHAR 必ず256以内におさまる整数値 TINYINT 数十億以上になるかもしれない整数値 BIGINT それ以外の整数値 INT -
TIMESTAMPについて
- Laravelのデフォルトの「created_at」「updated_at」はon update CURRENT_TIMESTAMPになっていない。カラム名を変えたいなどの理由から使わないようにします
-
補足
-
マイナスになる見込みがないものにはUNSIGNEDを付けます
-
データを取得する際、IN句の引数に入れる可能性がある値のカラムについてはindexキーをはるようにします
-
レコードの更新が行われる見込みがない場合はupdate_timeカラムは不要です
-
テーブルの言語を変更するために「config/database.php」ファイルの以下のmysql部分を修正します
'charset' => 'utf8', 'collation' => 'utf8_general_ci',
-
補助ツール
- テーブル内容の記述については下記のSequelPro用プラグインの利用がオススメです
参考
- タイムゾーンの確認方法
- データ型とサイズについて
- Indexをはった時に内部で行われている処理(BTreeについて)
- 使用したSQLをデバッグログにすべて残す方法(※デバッグに大変便利です)
- マイグレーションファイルを削除した時に注意すること