如何将 null 参数从播种机传递给 Laravel 工厂?
Posted
技术标签:
【中文标题】如何将 null 参数从播种机传递给 Laravel 工厂?【英文标题】:How to pass null argument to Laravel Factory from the seeder? 【发布时间】: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。我该如何解决?
【问题讨论】:
您的问题有点太不清楚了,请将整个工厂代码发布给您,当然要替换敏感位,按逻辑您显示的内容应该可以工作 【参考方案1】:我认为您正在寻找的是:https://laravel.com/docs/8.x/database-testing#sequences
【讨论】:
很高兴知道这一点,但这不是我的问题,我的问题是将值从播种机传递到工厂:( 您能否更新您的问题,更清楚地表达您想要实现的目标?【参考方案2】:您基本上需要在致电工厂之前进行检查。您不能传递一个值,以便工厂读取并处理它,不幸的是它反过来,所以工厂制作了一个模板,然后被您在 make/create 函数中传递的数组中的值覆盖,所以您唯一能做的就是在调用创建之前进行检查并填写。
【讨论】:
有没有办法在工厂的定义方法中传参数? ? @CarlosTinnelly 不,工厂比传递参数的时间要早得多。如果你去找文档,有工厂指令(不记得确切的名称)。以上是关于如何将 null 参数从播种机传递给 Laravel 工厂?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ADO 和 VB 将 NULL 或空字符串传递给存储过程输入参数?