迁移后的 Laravel 种子

问题描述 投票:0回答:4

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

或者你单独播种吗?

php laravel laravel-4 migration laravel-5
4个回答
96
投票

您可以使用

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

php artisan migrate:refresh --seed

这将回滚并重新运行所有迁移,然后运行所有播种程序。


额外一点,您还可以始终使用

Artisan::call()
从应用程序内部运行 artisan 命令:

Artisan::call('db:seed');

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

如果您想要特定的播种者课程。


61
投票

如果您不想删除现有数据并希望在迁移后播种

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

php artisan migrate:refresh --seed

在生产中将刷新您的数据库,删除从前端输入或更新的任何数据。

如果您想在迁移过程中为数据库提供种子(例如,对应用程序进行更新并保留现有数据),例如添加新表国家/地区以及种子数据,您可以执行以下操作:

在数据库/seeds 中创建数据库播种器示例 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');
    }
}

如果 YourTableSeeder 类出现 php 类未找到错误,请运行

composer dump-autoload


6
投票

虽然lukasgeiter的答案是正确的,但我想详细说明你的第二个问题。

还是需要单独播种?

是的。既然您谈论的是测试数据,您应该避免将播种迁移耦合。当然,如果这不是测试数据,而是应用程序数据,您始终可以将插入数据作为迁移的一部分。

顺便说一句,如果您想在 testing 中播种数据,您可以从 Laravel 测试用例中调用

$this->seed()


2
投票

针对 Laravel 框架运行迁移和播种器特定文件的提示

迁移

php artisan migrate --path=/database/migrations/fileName.php

回滚

php artisan migrate:rollback --path=/database/migrations/fileName.php

刷新

php artisan migrate:refresh --path=/database/migrations/fileName.php

播种机

php artisan db:seed --class=classNameTableSeeder

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.