LoginSignup
67
74

More than 5 years have passed since last update.

Laravelを使ったテーブル設計

Last updated at Posted at 2017-09-17

前提

  • 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',
      

補助ツール

参考

67
74
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
74