最近我一直在尝试通过 Model Factories 和 Faker 使用 Laravel 播种来播种我的数据库。
对于简单的模式,让它工作起来很容易:)。但是,在处理涉及外键和表关系的复杂数据库模式时,我遇到了几个问题:
- 一对一
- 一对多
- 多对多
...就像链接中描述的那样: Laravel 5.1 foreign keys in model factory。
在本主题中,官方文档建议像这样运行数据库种子:
public function run()
{
factory(App\User::class, 50)->create()->each(function ($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
...但是这种解决方案存在一个问题:当使用许多数据库表并运行许多种子(它们之间有许多关系)时,使用这种方法创建许多不必要的模型是很常见的。例如,如果我们在上述示例之一之前运行 PostsTableSeeder.php,那么所有这些帖子都不会链接到用户,并且永远不会用于测试和开发......
因此,在寻找一种处理这种情况的方法时,我想出了一个适合我的功能性解决方案,并避免不必要地创建那些“孤儿”模型......
我想与大家分享它,所以它只是在答案中解释:)。