Laravel - 两个工厂互相引用
Laravel - two factories refer to each other
我有一个现有的数据库,什么是不可修改的。我现在的工作是做工厂。
在本例中,我有两个 table。一个是item
table,一个是item_image
table.
一个商品有很多张图片,但是商品中存储了featured-image-id。
这是我的两个工厂:
物品工厂
$factory->define(Item::class, function (Faker $faker) {
return [
'title' => $faker->words(3, true)
'user' => function () {
return factory(User::class)->create()->id;
},
'featured_image' => function () {
return factory(Image::class)->create()->id;
},
];
});
ItemImage 工厂
$factory->define(Image::class, function (Faker $faker) {
return [
'item' => function () {
return factory(Item::class)->create()->id;
},
];
});
item.featured_image
列:
- FK -> item_image.id
- 不为空
item_image.item
列:
- FK -> item.id
- 不为空
例如,当我想创建一个项目时,项目工厂指的是 itemImage 工厂,它将创建一个项目,该项目将创建一个图像。布拉布拉布拉。它会导致无限循环。
我应该如何重写这些工厂?
感谢您的帮助。
我认为没有办法按照您想要的方式定义工厂..
我会按照您的定义保留它,但会以这种方式使用,这样您就不会创建额外的记录,例如:
$item = factory(Item::class)->create();
$image = $item->image; // instead of factory(Image::class)->create(); since record is created
或
$image = factory(Image::class)->create();
$item = $image->item;
我有一个现有的数据库,什么是不可修改的。我现在的工作是做工厂。
在本例中,我有两个 table。一个是item
table,一个是item_image
table.
一个商品有很多张图片,但是商品中存储了featured-image-id。
这是我的两个工厂:
物品工厂
$factory->define(Item::class, function (Faker $faker) {
return [
'title' => $faker->words(3, true)
'user' => function () {
return factory(User::class)->create()->id;
},
'featured_image' => function () {
return factory(Image::class)->create()->id;
},
];
});
ItemImage 工厂
$factory->define(Image::class, function (Faker $faker) {
return [
'item' => function () {
return factory(Item::class)->create()->id;
},
];
});
item.featured_image
列:
- FK -> item_image.id
- 不为空
item_image.item
列:
- FK -> item.id
- 不为空
例如,当我想创建一个项目时,项目工厂指的是 itemImage 工厂,它将创建一个项目,该项目将创建一个图像。布拉布拉布拉。它会导致无限循环。
我应该如何重写这些工厂?
感谢您的帮助。
我认为没有办法按照您想要的方式定义工厂..
我会按照您的定义保留它,但会以这种方式使用,这样您就不会创建额外的记录,例如:
$item = factory(Item::class)->create();
$image = $item->image; // instead of factory(Image::class)->create(); since record is created
或
$image = factory(Image::class)->create();
$item = $image->item;