Php 使用faker防止laravel工厂中两个外键的重复输入
我将实现如下数据库: 表:Php 使用faker防止laravel工厂中两个外键的重复输入,php,laravel,faker,Php,Laravel,Faker,我将实现如下数据库: 表: 项目:id(主键),代码唯一() 门店:id(主键)、姓名、地址 存货:标识(主键)、物料标识(fk)、仓库标识(fk)、盘点 例: 我有唯一代码为“k1”的商品,我有3个商店,例如:s1、s2、s3,现在 我应该有这样的库存 k1,S1500“k1项目存在于商店1(s1)中,计数为500”(本例中为ok) k1,S2200“k2项目存在于商店2(s2)中,计数为200”(本例中为ok) k1,s3 300“存储3(s3)中存在计数为300的k3项目”(本例中为
- 项目:id(主键),代码唯一()
- 门店:id(主键)、姓名、地址
- 存货:标识(主键)、物料标识(fk)、仓库标识(fk)、盘点
- k1,S1500“k1项目存在于商店1(s1)中,计数为500”(本例中为ok)
- k1,S2200“k2项目存在于商店2(s2)中,计数为200”(本例中为ok)
- k1,s3 300“存储3(s3)中存在计数为300的k3项目”(本例中为ok)
$factory->define(Item::class, function (Faker $faker) {
return [
'code' => $faker->unique()->name,
'cat_id' => Cat::all()->random()->id
];
});
$factory->define(Store::class, function (Faker $faker) {
return [
'name' => $faker->unique()->name,
'location' => $faker->address()
];
});
$factory->define(Inventory::class, function (Faker $faker) {
return [
// now here i want to generate faked data with no duplicated rows using fks
'item_id' => Item::all()->id,
'store_id' => Store::all()->id
];
});
稍微改变一下你的方法,做一些如下的事情怎么样(注意,我没有测试代码,因为我给了你2便士)
})) 您是否尝试过类似的方法:
'item_id'=>函数(){return factory(App\item::class)->create()->id;}
和store的方法相同..不,我将尝试一下,但这种方法将防止条目中的重复?返回的id始终是唯一的(假设它是两个表上唯一的递增主键)。因此,不可能获得重复的组合。是的,我理解,谢谢你,我的朋友。嗨,这种方法如何防止条目中的重复?我要测试它。在我编写解决方案时,在前往午休@user3532758之前,我没有看到你的评论。
$factory->define(Inventory::class, function (Faker $faker) {
return [
'item_id' => function() {
return factory(Item::class)->create()->id;
},
'store_id' => function() {
return factory(Store::class)->create()->id;
},
];