Home » Php » Laravel passing variables from one seed file to another?

Laravel passing variables from one seed file to another?

Posted by: admin November 29, 2017 Leave a comment

Questions:

I have created multiple seed files and my main DatabaseSeeder file looks like this:

<?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);
    }
}

How can I make it so that UserTableSeeder and PersonTableSeeder gets the variables from my main seeder file? (What I’m really trying to do is use Faker to output random values, but use the same value for each table seeder)

Answers:

I had the same problem, ended up overriding the call() function by adding $extra var and passing it to run() function.

<?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");
        }
    }

}

and then add $extra to your seeder class

// database/seeds/UserTableSeeder.php


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

hope it helps.