【问题标题】:How to pass null argument to Laravel Factory from the seeder?如何将 null 参数从播种机传递给 Laravel 工厂?
【发布时间】:2021-07-11 16:41:51
【问题描述】:

我有一个这样的工厂定义:

public function definition() {

        $to = $this->faker->numberBetween(1, 3);

        return [
            "ad_id" => $to == 1 ? Ad::all()->random()->id : null,
            "delivery_id" => $to == 2 ? Delivery::all()->random()->id : null,
            "group_event_id" => $to == 3 ? GroupEvent::all()->random()->id : null,
        ];;
        
}

基本上,有3个字段,但只能定义一个,如果定义了一个,其他的必须为null,工厂使用faker来决定它,但是现在,我想从播种器中设置我想要的:

MyModel::factory()->create([
      "ad_id" => null,
      "delivery_id" => 5,
      "group_event_id" => null,
]);

但这不起作用,工厂忽略了我为其他字段传递的空参数,并为这两个空参数设置了随机 ID。我该如何解决?

【问题讨论】:

  • 您的问题有点太不清楚了,请将整个工厂代码发布给您,当然要替换敏感位,按逻辑您显示的内容应该可以工作

标签: php laravel laravel-seeding laravel-factory


【解决方案1】:

【讨论】:

  • 很高兴知道这一点,但这不是我的问题,我的问题是将值从播种机传递到工厂:(
  • 您能否更新您的问题,更清楚地表达您想要实现的目标?
【解决方案2】:

您基本上需要在致电工厂之前进行检查。您不能传递一个值,以便工厂读取并处理它,不幸的是它反过来,所以工厂制作了一个模板,然后被您在 make/create 函数中传递的数组中的值覆盖,所以您唯一能做的就是在调用创建之前进行检查并填写。

【讨论】:

  • 有没有办法在工厂的定义方法中传参数? ?
  • @CarlosTinnelly 不,工厂比传递参数的时间要早​​得多。如果你去找文档,有工厂指令(不记得确切的名称)。
猜你喜欢
  • 2020-01-29
  • 2021-03-03
  • 2015-11-29
  • 2020-03-23
  • 2023-03-06
  • 1970-01-01
  • 2012-08-29
  • 2017-07-30
  • 2018-08-01
相关资源
最近更新 更多