【Laravel】如何使用模型工廠(factories)建立假資料(一)

❓什麼是模型工廠(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();
  1. factory()
    • factory()這個方法會自動去database/factories這個路徑底下,找出對應的factory來使用。
    • 如果model主檔名為User,則對應到的factory就是UserFactory這個檔案
      (model主檔名後面接”Factory"當作factory的主檔名來找)
  2. count()
    • count(5)這個方法會生成5筆隨機的資料
  3. 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()仍會報錯,無法成功建立資料