php - 使用faker防止laravel工厂中两个外键的重复条目
问题描述
我要实现一个这样的数据库:
表:
- 项目 : id(pk),code unique()
- 商店:id(pk)、姓名、地址
- 库存:id(pk)、item_id(fk)、store_id(fk)、count
例如:我有唯一代码“k1”的商品,我有 3 家商店,例如:s1、s2、s3、now
我应该有这样的库存
k1,s1,500 “k1 项目存在于商店 1(s1) 中,计数为 500”(在这种情况下可以)
k1,s2,200 “k2 项目存在于商店 2(s2) 中,计数为 200”(在这种情况下可以)
k1,s3 300 “k3 项目存在于商店 3(s3) 中,计数为 300”(在这种情况下可以)
我希望 k1 和 s1(外键)在库存表中创建一个新的复合键
避免重复的行,例如
k1,s1,250 或 k1,s2,100 或 k1,s3,45
换句话说,我不希望项目和商店的外键在数据透视表中重复超过 1 行“item_id 和 store_id 在库存表中构成唯一行”
我已经实现了,我现在的问题是:
使用 laravel 并使用带有 faker 的 Factory,我需要您的帮助来防止外键重复条目
这是我的工厂代码:
$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 便士)
$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;
},
];
});
推荐阅读
- laravel - Laravel 计数、groupBy 和 orderBy 无法正常工作
- c# - Xamarin 表单中的换行符
- c - 了解 printf 中的段错误行为
- python - 如何比 .append 更快地构建列表?
- css - 如何使用flexbox修复页眉而不是页脚?
- java - 生成随机 ARGB 图像不会生成可打开的图像
- code-signing - Comodo - 签名代码 - 时间戳问题
- javascript - owl-carousel 的问题始于延迟
- npm - 在 bitbucket 管道中执行命令后需要插入用户名和密码
- python - 制作 pandas Multiindex 数据帧比追加更快的方法