Laravel-两个工厂互相参照

时间:2018-07-31 21:51:36

标签: laravel laravel-5 factory

我有一个现有的数据库,无法修改。我目前的工作是制造工厂。

在当前情况下,我有两个表。一个是item表,另一个是item_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工厂,该工厂将创建一个将创建图像的项目。 bla bla bla。它会导致无限循环。

我应该如何重写这些工厂?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为没有一种方法可以按照您想要的方式定义工厂。

我将按照您的定义进行保存,但是以这种方式使用,这样您就不会创建额外的记录,例如:

$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;