gpt4 book ai didi

php - 使用 faker 防止 Laravel 工厂中两个外键的重复条目

转载 作者:行者123 更新时间:2023-12-02 14:10:08 26 4
gpt4 key购买 nike

我将实现一个这样的数据库:

表格:

  • 项目:id(pk)、唯一代码()
  • 商店:id(pk)、名称、地址
  • 库存:id(pk)、item_id(fk)、store_id(fk)、数量

例如:我有一个带有唯一代码“k1”的商品,并且我有 3 个商店,例如:s1、s2、s3、now

我应该有这样的库存

  • k1,s1,500“商店 1(s1) 中存在 k1 件商品,数量为 500”(本例正常)

  • k1,s2,200“k2 商品存在于商店 2(s2) 中,数量为 200”(本例正常)

  • k1,s3 300“k3 商品存在于商店 3(s3) 中,数量为 300”(本例正常)

我希望 k1 和 s1(外键)在 inventory 表中创建一个新的复合键

避免重复的行,例如

k1,s1,250 或 k1,s2,100 或 k1,s3,45

换句话说,我不希望项目和存储的外键在数据透视表中重复超过 1 行“item_id 和 store_id 在库存表中形成唯一的行”

我已经实现了,我现在的问题是:

使用 laravel 并使用 Factory 和 faker,我需要你的帮助来防止使用外键重复条目

这是我的工厂代码:

$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;
},
];

});

关于php - 使用 faker 防止 Laravel 工厂中两个外键的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58993832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com