最近,我一直试图使用Laravel种子模型工厂和Faker来种子我的数据库。用模型工厂,一对一和一对多关系定义Laravel外键而不会创建不必要的模型
对于简单的模式,它只是一件轻而易举的工作:)。然而,其中涉及外键的复杂的数据库模式和表之间的关系工作时,我遇到了几个问题:
- 一对一
- 一对多
- 多对多
...就像链接中描述的那样: Laravel 5.1 foreign keys in model factory。
在这个话题中,official documentation建议运行数据库种子是这样的:
public function run()
{
factory(App\User::class, 50)->create()->each(function ($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
...但有一个问题,这个解决方案:与许多数据库表和运行许多种工作时(以它们之间有很多关系),所以很常见使用这种方法创建许多不必要的模型。例如,如果我们在上面的例子之前运行PostsTableSeeder.php,那么所有这些帖子都不会被链接到用户,并且永远不会被用于测试和开发中...
因此,搜索处理这种情况的方式,我已经找到了一个适用于我的功能性解决方案,并避免了那些'孤儿'模型的不必要的创建...
我想与大家分享,所以它只是解释在答案:)。
我不认为你可以建议,实现了许多相同的的最佳途径很多关系?我有用户和案例与User_Cases表来解决多对多。我试图写一个工厂来播种我的数据库。 – Kenilik
我在播种机内获得**多对多**的方法,而不是工厂......在播种机中,您需要简单地检索两个模型(*用户*和*个案*),并通过其中一个指派另一个模型(s)在每种情况下。 – andcl