0

我有这样的工厂定义:

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。我该如何解决?

4

2 回答 2

3

我认为您正在寻找的是:https ://laravel.com/docs/8.x/database-testing#sequences

于 2021-04-16T17:24:30.297 回答
2

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

于 2021-04-16T16:28:47.187 回答