代码之家  ›  专栏  ›  技术社区  ›  Levente Otta

Laravel-两个工厂互相参照

  •  0
  • Levente Otta  · 技术社区  · 6 年前

    我有一个现有的数据库,什么是不可修改的。我目前的工作是制造工厂。

    在目前的情况下,我有两张桌子。一个是 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;
        },
      ];
    });
    

    项目图像工厂

    $factory->define(Image::class, function (Faker $faker) {
      return [
        'item' => function () {
          return factory(Item::class)->create()->id;
        },
      ];
    });
    

    item.featured_image 专栏:

    • fk->项_image.id
    • 非空

    item_image.item 专栏:

    • fk->项.id
    • 非空

    例如,当我想要创建一个项时,项工厂引用项图像工厂,它将创建一个将创建图像的项。BLA-BLA-BLA。它导致无限循环。

    我该如何改写这些工厂?

    谢谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Seva Kalashnikov    6 年前

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

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

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