我创建了多个种子文件,我的主要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);
}
}
如何使UserTableSeeder和PersonTableSeeder从我的主播种文件中获取变量? (我真正想做的是使用Faker输出随机值,但为每个表播种器使用相同的值)
答案 0 :(得分: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");
}
}
}
然后将$ extra添加到播种机类
// database/seeds/UserTableSeeder.php
/**
* Run the database seeds.
*
* @return void
*/
public function run($extra = null)
{
var_dump($extra);
}
希望它有所帮助。
答案 1 :(得分:2)
As of 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);
}
}
答案 2 :(得分:-3)
也在寻找这个的任何人。接受的答案会起作用,但是为什么这么简单的事情变得过于复杂呢?
只需使用常量或全局变量即可。
DatabaseSeeder.php
define('SEEDING_SIZE', 10);
现在,在任何播种机中,该名称都将作为“ SEEDING_SIZE”提供。
不需要额外的功能。