Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用faker防止laravel工厂中两个外键的重复输入_Php_Laravel_Faker - Fatal编程技术网

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”的商品,我有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项目”(本例中为ok)

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

避免重复的行,如

k1、S1250或k1、S2100或k1、s3,45

换句话说,我不希望item和store的外键在pivot表中重复超过一行 “物料标识和门店标识在库存表中形成唯一的行”

我已经意识到,我现在的问题是:

使用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便士)


}))

您是否尝试过类似的方法:
'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;
      },
  ];