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