iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0

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',
    ];
});

執行成功之後,就新增一筆假資料囉~~~~~~~~~~~~~~

但這樣還是無法解決開頭的問題啊!!!!!!!!!!!!!!!!!!/images/emoticon/emoticon18.gif

如果需要建立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',
來玩看看囉!!!


上一篇
DAY18: 基礎 model
下一篇
DAY20: request
系列文
從0開始-30天摸索laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言