是否有 Laravel 内置方法只运行一次播种器,就像使用迁移表进行迁移一样?

Dre*_*her 5 php laravel

我们的团队希望能够使用播种器并在管道中运行种子命令,但是我们不想每次部署时都运行播种器,在许多情况下只运行一次,这样数据就在那里并且不会重复。

Laravel 中是否有一种内置方法可以只运行一次播种器并跟踪其历史记录,类似于迁移?

如果没有,我们的团队将不得不自己使用播种表和历史功能来实现这一点。

amp*_*ine 8

从迁移中调用播种器,并确保不在DatabaseSeeder( )中引用它database/seeds/DatabaseSeeder.php

database/migrations/2022_01_19_seedmytable.php

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Artisan;

class SeedMyTable extends Migration {
    public function up() {
        Artisan::call('db:seed', [
            '--class' => \SampleDataSeeder::class,
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

将其作为自己的迁移进行(推荐),或者您也可以将该Artisan::call('db:seed', ... )位附加到另一个[新]多用途迁移的末尾。不要添加到现有的迁移脚本,否则无法保证其运行。

TMTOWTDI

MyModelClass::create(...)您还可以在迁移方法的末尾手动添加一堆语句up()

<?php

use App\Models\User;
use Illuminate\Database\Migrations\Migration;

class SeedMyTable extends Migration {
    public function up() {
        // ... [imagine table creation statements here] ...
        User::create(['name' => 'Bob']);
        User::create(['name' => 'Alice']);
    }
}
Run Code Online (Sandbox Code Playgroud)

artisan您也可以根据需要登录到适当的环境和命令:

$ artisan db:seed --class=SampleDataSeeder
Run Code Online (Sandbox Code Playgroud)