Factory中文好像翻模型工廠,看完了seeder之後是不是覺得好像少了點什麼? 如果我們需要100個客戶資料、200筆訂單、300樣商品,那使用seeder不就要弄天荒地老、海枯石爛,當然身為一個專業級框架laravel,一定會想到這種情況囉!接下來就進入今天的主題 - Factory。
要建立一個Factory,一樣使用artisan唷php artisan make:factory UserFactory
要換個名字也行~php artisan make:factory UserFactory --model=User
檔案會放在database/factories的資料夾中
檔案內容大概會是這樣
use Faker\Generator as Faker;
$factory->define(Model::class, function (Faker $faker) {
return [
//
];
});
那我們該如何使用它呢?
先新增一下假資料規則 (其實就是把seed的貼過來)
$factory->define(Model ::class, function (Faker $faker) {
return [
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
];
});
回到seed,我們需要修改一下run的內容,常常會看到網路上的範例如下:
public function run()
{
$user = factory(App\User::class)->make();
}
我們把make改成create,執行
php artisan db:seed --class=UsersTableSeeder
我自己執行到這邊有報錯,所以我研究了一下改為下面的方式(參考看看)
此時我們把Model::class 改成App\User 就可以囉!!!
use Faker\Generator as Faker;
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
];
});
執行成功之後,就新增一筆假資料囉~~~~~~~~~~~~~~
但這樣還是無法解決開頭的問題啊!!!!!!!!!!!!!!!!!!
如果需要建立100個的話,可以這樣寫(以此類推)$users = factory(App\User::class, 100)-> create ();
這樣一來測試資料會越來越多
所以我們也可以在seed裡面新增一個刪除資料表,來避免每次執行之後資料會越來越多DB::table('users')->delete();
在factory會常看到Faker的影子,可以嘗試看看
faker->name
faker->name
faker->text
大致上的感覺就是seeder可以填充假資料,然後Factory可以藉由Faker產生批次的假資料。
我光用這一篇的內容就被兒子gank了6次!!!!還有tinker這個東西,但我就先忽略好了,有興趣的朋友可自行google。
註記一下:
LARAVEL FAKER產生假資料使用中文:
最後在config\app.php下新增一行,指定Faker 使用zh_TW語言
'faker_locale' => 'zh_TW',
來玩看看囉!!!