web-dev-qa-db-ja.com

Laravel移行後のシード

移行が完了すると、テーブルにテストデータを自動的にシードするために、移行に追加できるものはありますか?

または、あなたは持っている別々にシードするのですか?

19
imperium2335

_migrate:refresh_オプションを指定して_--seed_を呼び出すと、移行の完了後に自動的にシードできます。

_php artisan migrate:refresh --seed
_

これにより、すべての移行がロールバックおよび再実行され、その後すべてのシーダーが実行されます。


少し余分なだけですが、Artisan::call()を使用して、アプリケーション内からアーティザンコマンドを実行することもできます。

_Artisan::call('db:seed');
_

または

_Artisan::call('db:seed', array('--class' => 'YourSeederClass'));
_

特定のシーダークラスが必要な場合。

41
lukasgeiter

lukasgeiter's answer は正しいですが、2つ目の質問について詳しく説明します。

または、別々にシードする必要がありますか?

はい。 テストデータについて話しているので、シードとの結合を避けるべきですmigration。もちろん、これがテストデータではなくアプリケーションデータである場合は、常にデータの挿入を移行の一部にすることができます。

余談ですが、データを testing の一部としてシードする場合は、Laravelテストケース内から$this->seed()を呼び出すことができます。

5
Jason McCreary

lukasgeiter's answer はテストデータに対しては正しいですが、artisanコマンドに従って実行しています

php artisan migrate:refresh --seed

本番環境では、フロントエンドから入力または更新されたデータを削除してデータベースを更新します。

移行に沿ってデータベースをシードする場合(既存のデータを保持したままアプリケーションの更新をロールアウトする例)、たとえばシードデータとともに新しいテーブル国を追加する場合は、次のようにできます。

データベースシーダーの例YourSeeder.phpとロケーションテーブルの移行を作成する

class YourTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tablename', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name',1000);
            $table->timestamps();
            $table->softDeletes();
        });

        $seeder = new YourTableSeeder();
        $seeder->run();
    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::dropIfExists('tablename');
    }

}

4
Manpreet