在Laravel中,數據庫種子通常通過模型工廠完成。所以,你定義使用法克爾數據模型的藍圖,並說有多少實例需要:Laravel - 種子關係
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt(str_random(10)),
'remember_token' => str_random(10),
];
});
$user = factory(App\User::class, 50)->create();
但是,可以說,您的用戶模型具有多種車型一hasMany
關係,就像一個Post
模型,例如:
Post:
id
name
body
user_id
所以在這種情況下,你要在你的用戶表接種是實際用戶種子您的帖子表。這似乎並沒有被明確討論,但我沒有找到在Laravel文檔如下:
$users = factory(App\User::class, 3)
->create()
->each(function($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
所以在您的用戶工廠,你爲你創建的每個用戶創建帖子的X號。然而,在一個可能有50-75個模型與用戶模型共享關係的大型應用程序中,您的用戶播種器實質上會最終爲整個數據庫播種所有它的關係。
我的問題是:這是處理這個問題的最好方法嗎?我唯一能想到的其他事情就是先播種用戶(不播種任何關係),然後在播種其他模型時根據需要從數據庫中提取隨機用戶。但是,如果他們需要獨一無二,則必須跟蹤哪些用戶已被使用。此外,似乎這會在播種過程中增加大量額外的查詢批量。
感謝您的回覆。我一直在嘗試這樣的事情。但是,如果我想使用同一組用戶(比如說20個其他模型),我覺得我的播種器很快就會混亂。從本質上講,我所有的播種邏輯最終都會發生在一個文件中,因爲'用戶'與許多其他模型相關聯。但也許沒有更好的方法 – djt