Laravel将变量从一个种子文件传递到另一个种子文件?

Sos*_*osa 5 php database laravel laravel-5

我创建了多个种子文件,我的主要DatabaseSeeder文件如下所示:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $name1 = "James";
        $name2 = "Jeff";
        $name3 = "Joe";

        $this->call(UserTableSeeder::class);
        $this->call(PersonTableSeeder::class);
        $this->call(IndividualTableSeeder::class);
        $this->call(HumanTableSeeder::class);
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能使UserTableSeeder和PersonTableSeeder从我的主播种文件中获取变量?(我真正想做的是使用Faker输出随机值,但为每个表播种器使用相同的值)

Or *_*har 21

我遇到了同样的问题,最后通过添加$ extra var并将其传递给run()函数来覆盖call()函数.

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $name1 = "James";
        $name2 = "Jeff";
        $name3 = "Joe";

        $this->call(UserTableSeeder::class, $name1);
        $this->call(PersonTableSeeder::class);
        $this->call(IndividualTableSeeder::class);
        $this->call(HumanTableSeeder::class);
    }

    public function call($class, $extra = null) {
        $this->resolve($class)->run($extra);

        if (isset($this->command)) {
            $this->command->getOutput()->writeln("<info>Seeded:</info> $class");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

然后将$ extra添加到播种器类中

// database/seeds/UserTableSeeder.php


  /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run($extra = null)
    {
        var_dump($extra);
    }
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


Tof*_*del 6

从 Laravel 8.2 开始,您可以像这样将参数本地传递给播种机

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $name1 = "James";

        $this->callWith(UserTableSeeder::class, ['name' => $name1]);
        $this->call(PersonTableSeeder::class);
        $this->call(IndividualTableSeeder::class);
        $this->call(HumanTableSeeder::class);
    }

}

class UserTableSeeder extends Seeder {
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run($name = null)
    {
        var_dump($name);
    }
}
Run Code Online (Sandbox Code Playgroud)