マイグレーションとモデルの作成

Last-modified: Thu, 06 Sep 2018 12:51:20 JST (43d)
  • Laravelでは、マイグレーションとして、以下のコマンドを実行することにより、
    テーブル作成に必要なひな形ファイルを生成することができます。
    php artisan make:migration create_<テーブル名を複数形にしたもの>_table --create=<テーブル名を複数形にしたもの>
    作成されたひな形ファイルは、database/migrations/YYYY_MM_DD_HHMiSS_<テーブル名を複数形にしたもの>_table.php
    な感じで作成されます。
    作成されたファイルの中にある、upメソッド内に以下のような感じで項目を定義していきます。
        public function up()
        {
            Schema::create('login_histories', function (Blueprint $table) {
                $table->increments('id');
                $table->integer('user_id')->nullable(false)->comment('登録ユーザID');
                $table->string('memo')->nullable(false)->comment('備考');
                $table->ipAddress('ipaddr')->nullable(false)->comment('アクセス元IPアドレス');
                $table->longText('user_agent')->nullable(false)->comment('ユーザエージェント');
                $table->timestamps();
    
                //外部キー制約
                $table->foreign('user_id')
                    ->references('id')
                    ->on('users')
                    ->onDelete('cascade');
            });
        }
    また、downメソッドには、Drop用のコードを書きます。具体的にはこんな感じ。
        public function down()
        {
            Schema::dropIfExists('login_histories');
        }
    • なお、ここでは例として外部キー制約を設定しているけど、テーブル制約設定は削除コストなどよく考えてつけること。
  • 作成したマイグレーションファイルを使って実際にテーブルを作成するには、
    php artisan migrate
    で作成されます。
    次に、テーブルにアクセスするためのモデルを作成します。
    php artisan make:model Models/<テーブル名の単数形>
    これで、app/Models/配下にモデルファイルのひな型ができます。
  • マイグレーションファイルの変更は、基本的に作成と同じです。
    php artisan make:migration modify_<テーブル名を複数形にしたもの>_table --table=<テーブル名を複数形にしたもの>
    でひな形ができるので、その中で項目の削除、変更を行います。
    作成した制約の変更をする場合は、いったん制約の削除と追加を記載しないと当然エラーになります。
    また、変更時はロールバック時も考慮しておきましょう。
    具体的には以下のような感じです。
        public function up()
        {
            Schema::table('rss_datas', function (Blueprint $table) {
                //テーブルを分割するので項目削除
                $table->dropColumn('rss_contents_list_cnt');
                $table->dropColumn('hidden_flg');
                $table->dropColumn('deliv_flg');
                $table->dropColumn('repeat_deliv_deny_flg');
    
            });
        }
    
        public function down()
        {
            //ロールバック時項目を追加する。
            Schema::table('rss_datas', function (Blueprint $table) {
                $table->smallInteger('rss_contents_list_cnt')->nullable(false)->comment('RSS記事表示数');
                $table->boolean('hidden_flg')->nullable(false)->comment('非表示フラグ');
                $table->boolean('deliv_flg')->nullable(false)->comment('メール配信フラグ');
                $table->boolean('repeat_deliv_deny_flg')->nullable(false)->comment('配送拒否フラグ');
            });
        }
    変更時のマイグレーション反映は、テーブル作成時と同様
    php artisan migrate
    になります。
    ロールバックは単純に
    php artisan migrate:rollback
    になります。

Counter: 15, today: 2, yesterday: 0

このページの参照回数は、15です。