2016-12-18 86 views
4

我使用Laravel框架,最近我被告知有一個名爲database seeding的東西,它會爲我們的測試生成一個假數據集。我的理解是否正確?什麼是Laravel的數據庫播種?

好吧,這很奇怪。怎麼運行的?它如何知道在數據庫的X列中需要哪種類型的數據?它是如何生成它的?

另外,我不能讓我的真實數據集(類似於導出)種子?你知道,我不太瞭解英語,這就是爲什麼我無法理解種子在數據庫領域的概念。

回答

3

通常你使用model Factoriesfaker創建假數據(與關係等)來開發和測試你的應用程序。

如果您想播種真實數據,只需使用命令導入轉儲。或者,如果您的數據與國家/地區表格類似,則可以創建插入真實數據而不使用faker或模型工廠的播種器。

此外,您可以使用some package從實際數據創建播種機。您可能想要閱讀docs on seeding

+0

1)當我製作真實數據的種子時,它將被存儲在何處? 2)在那種情況下,當我使用'php artisan migrate --seed',那麼將會刷新遷移並自動再次插入所有實際數據? – stack

+0

1)在播種機類中。或者,seeder類會調用一些命令(這​​取決於包)。 2)是的。 –

5

是的,Laravel配備了非常棒的&熱門包 - Faker。你可以寫這個例子中,使用法克爾以及產生10個用戶是這樣的(內部DatabaseSeeder.php):

use DB; 
use Illuminate\Database\Seeder; 
use Illuminate\Database\Eloquent\Model; 

use Faker\Factory as Faker; 

class DatabaseSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     $faker = Faker::create(); 
     foreach (range(1,10) as $index) { 
      DB::table('users')->insert([ 
       'name' => $faker->name, 
       'email' => $faker->email, 
       'password' => bcrypt('secret'), 
      ]); 
     } 
    } 
} 

這就是它 - $faker->name會產生一個隨機的人的名字,並$faker->email - 一個隨機的電子郵件。在運行命令php artisan db:seed後,您的數據庫將被填充一些隨機條目。

您可以require-dev下找到這個包您composer.json文件中:

"require-dev": { 
    "fzaninotto/faker": "^1.6", // <------- here 
    "mockery/mockery": "0.9.*", 
    "phpunit/phpunit": "~5.0", 
    "symfony/css-selector": "3.1.*", 
    "symfony/dom-crawler": "3.1.*", 
    "laracasts/testdummy": "~2.0" 
}, 

法克爾可以產生大量的數據,從其中的一些在下面給出:

$faker->randomDigit; 
$faker->numberBetween(1,100); 
$faker->word; 
$faker->paragraph; 
$faker->lastName; 
$faker->city; 
$faker->year; 
$faker->domainName; 
$faker->creditCardNumber; 

希望這有助於!

+0

@stack - 很高興知道它幫助了你,謝謝! –