迁移后的Laravel种子

imp*_*335 16 php migration laravel laravel-4 laravel-5

迁移完成后,我可以在迁移中自动为表添加测试数据吗?

或者你必须单独种子?

luk*_*ter 43

您可以migrate:refresh使用--seed选项调用以在迁移完成后自动播种:

php artisan migrate:refresh --seed
Run Code Online (Sandbox Code Playgroud)

这将回滚并重新运行所有迁移并在之后运行所有播种器.


同样多一点,您也可以始终使用Artisan::call()从应用程序内部运行工匠命令:

Artisan::call('db:seed');
Run Code Online (Sandbox Code Playgroud)

要么

Artisan::call('db:seed', array('--class' => 'YourSeederClass'));
Run Code Online (Sandbox Code Playgroud)

如果你想要特定的播种机课程.

  • 请注意,如果在数据库中拥有种子数据以外的其他数据后在生产环境中运行此命令,则会丢失该数据。 (2认同)

Man*_*eet 9

lukasgeiter的答案对于测试数据是正确的,但是按照工匠命令运行

php artisan migrate:refresh --seed
Run Code Online (Sandbox Code Playgroud)

在生产环境中,将刷新您的数据库,删除从前端输入或更新的所有数据。

如果要在迁移过程中为数据库设置种子(例如,对应用程序进行更新以保留现有数据),例如将新的表国家/地区与种子数据一起添加,则可以执行以下操作:

创建数据库播种器示例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');
    }
Run Code Online (Sandbox Code Playgroud)

}

  • 这应该是公认的答案imo。从迁移中这确实是可读的。此外,如果您从迁移中调用命令,您还需要添加 --force 标志以防止系统要求在生产服务器中进行确认。 (2认同)

Jas*_*ary 5

尽管lukasgeiter的回答是正确的,但我想详细说明您的第二个问题。

还是您必须单独播种?

是。由于您在谈论测试数据,因此应避免将种子迁移耦合在一起。当然,如果这不是测试数据,而是应用程序数据,则始终可以将插入数据作为迁移的一部分。

顺便说一句,如果您想在测试过程中$this->seed()植入数据,则可以从Laravel测试用例中调用。