В Laravel загрузка базы данных обычно осуществляется через фабрики моделей. Таким образом, вы определяете план вашей модели с использованием данных Faker и говорите, сколько экземпляров вам нужно:
$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());
});
Итак, в вашем User factory вы создаете X количество сообщений для каждого созданного вами пользователя. Тем не менее, в большом приложении, где, возможно, 50 - 75 моделей разделяют отношения с пользовательской моделью, ваш пользовательский сеятель по существу заканчивает всю базу данных всеми ее отношениями.
Мой вопрос: это лучший способ справиться с этим? Единственное, что я могу придумать, это сначала Seed the Users (без посева каких-либо отношений), а затем вытащить случайных пользователей из БД по мере необходимости, пока вы высеиваете другие Модели. Однако в тех случаях, когда они должны быть уникальными, вам нужно будет отслеживать, какие пользователи были использованы. Кроме того, похоже, что это добавит много дополнительных запросов к процессу посева.