❓什麼是模型工廠(Factories)
📝內建範例(User、UserFactory)
👤User
Laravel已內建兩個class,其中User 使用HasFactory這個trait,這樣User實例化後,就擁有了factory()這個方法。
而factory()可這樣使用(以下兩種寫法):
$collection = User::factory()->count(5)->make();
//or
$collection = User::factory()->count(5)->create();
- factory()
- factory()這個方法會自動去database/factories這個路徑底下,找出對應的factory來使用。
- 如果model主檔名為User,則對應到的factory就是UserFactory這個檔案
(model主檔名後面接”Factory"當作factory的主檔名來找)
- count()
- count(5)這個方法會生成5筆隨機的資料
- make()、create()
- make()會讓這5筆資料,包成一個新的collection。
- create()除了會生成collection外,還會真的將這5筆塞進user資料表裡面。
🏭UserFactory
上面已講完透過model來呼叫factory的方法,而factory可於definition函數內,定義產生出來的資料格式。
而從facrtory跑出來的隨機資料,又是如何產生的呢?
答案主要是透過一個php的library→faker,而factory已內建好,可直接使用fake()來產生隨機資料。
faker詳細用法,請參考上述github的連結
🧪使用tinker進行測試
可以看到直接生成包有兩筆的colleciton,如果make()改用create()則會直接塞進資料表
當然如果factory生出來的資料不符合資料表的格式,如某欄位為int,卻生出string,則使用create()仍會報錯,無法成功建立資料