2015-09-01 38 views
4

我創建了多個種子文件和我的主要DatabaseSeeder文件看起來像這樣:Laravel將變量從一個種子文件傳遞到另一個種子文件?

<?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

當你到達PersonTableSeeder時,你將迭代用戶併爲每個用戶創建一個人。這意味着你只需要在PersonTableSeeder中生成名字。 – user2094178

+0

對於我想要做的事情,我需要一些列來匹配其他表中的相同值,這就是爲什麼我設置變量以外的類。例如,我將生成一個隨機數,並且我想將相同數字傳遞給'UserTableSeeder'和'PersonTableSeeder'。 – Sosa

+0

你必須爲一個用戶創建一個人,這個用戶將擁有該隨機數。 – user2094178

回答

16

我有同樣的問題,結束了通過添加$ extra var覆蓋call()函數並將其傳遞給run()函數。

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

} 

,然後添加額外的$你播種機類

// database/seeds/UserTableSeeder.php 


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

希望它幫助。

相關問題