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)
希望能帮助到你.
从 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)