(laravel)マイグレーションしてテストデータの挿入

マイグレーション

マイグレーションファイル作成

$ php artisan make:migration create_messages_table --create=messages

messagesの部分はお好きなテーブル名にしてください。注意点として、テーブル名は基本的に複数形にします。別の名前をつける場合は明示的に指定する必要があります。

マイグレーションファイルの内容を適宜変更してください。

public function up()
    {
        Schema::create('messages', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title', 20);
            $table->timestamps();
        });
    }

マイグレーション実行

$ php artisan migrate
Migration table created successfully.

モデル作成

$ php artisan make:model モデル名
$ php artisan make:model Models/モデル名 // Modelsディレクトリを作成済の場合

app ディレクトリにMessageモデルが作成されます。とりあえずこれだけでok。モデルとはDBを繋ぐもの、という認識で特に問題ないでしょう。モデル名は複数形にはしません。

モデルについて記事にしました。

bonoponz.hatenablog.com

シーダーファイル

シーダーファイル作成

$ php artisan make:seeder MessagesTableSeeder

ファイルの中身も適宜変更してください。

public function run()
    {
      DB::table('table')->insert([
            [
                'id' => '001',
                'body' => 'サンプルテキスト', 
                'updated_at' => Carbon::create(2020, 4, 1, 11, 4, 5),
            ],
            [
                'id' => '002',
                'body' =>'サンプルテキスト', 
                'updated_at' => Carbon::create(2020, 4, 1, 12, 4, 5),
            ],
        ]);
    }
}

シーダーファイル内で改行を入れたい!

もし長文などを登録する場合、改行を入れたいときもあると思います。そんな時はシングルクォーテーションをダブルクォーテーションに変えて、\nエスケープシーケンス)を書いておけば無事改行されます。

public function run()
    {
      DB::table('table')->insert([
            [
                'id' => '001',
                'body' => 'サンプルテキスト', 
                'updated_at' => Carbon::create(2020, 4, 1, 11, 4, 5),
            ],
            [
                'id' => '002',
                'body' => "サンプルテキスト\nサンプルテキスト",  // ここ!
                'updated_at' => Carbon::create(2020, 4, 1, 12, 4, 5),
            ],
        ]);
    }
}

シーダー実行

新しいクラス(シーダー)を作ったらcomposer dump-autoloadも忘れずに。

$ composer dump-autoload
Package manifest generated successfully. // これが表示されれば成功

これは少〜し時間がかかるかもしれまんせん。1分はかからないと思いますが。

そしてシーダーを実行すればDBに反映されます。

$ php artisan db:seed --class=MessagesTableSeeder

一括で実行

シーダーファイルが複数ある場合は、一括で実行できるようにもできます。

bonoponz.hatenablog.com

まとめ

これでテストテーブルができるので、laravelでDBを使って開発する場合に便利です。

おまけ(ロールバック

もしマイグレーションを実行した後にやっぱり戻したい!となったら以下を実行します。

ひとつまえに戻す

$ php artisan migrate:rollback

回数を指定して戻す

stepオプションで巻き戻す個数を指定できます。

$ php artisan migrate:rollback --step=5

すべてのマイグレーションをなかったことに

$ php artisan migrate:reset

テーブルがすべて削除されます。

注意点('21 1月追記)

指定したファイルだけをマイグレーションし直すことはできないようです。

なぜならマイグレーションは連続的なものだからということです。外部キーを設定していたりすると理解しやすいかもしれませんね。

もしそのような場合は残念ながらすべてをマイグレーションし直すしかありません。以下の方法がありますが、おすすめはrefreshです。

$ php artisan migrate:refresh
$ php artisan migrate:reset
  • 作成済みのテーブルを削除
$ php artisan migrate:fresh

参考にしたサイト様

入門Laravelチュートリアル (3) ToDoアプリのフォルダ一覧表示機能を作る | Hypertext Candy

【Laravel】Base table or view not found: 1146エラーの解消法【初心者向け】 | webico blog

データベース:マイグレーション 6.x Laravel