【发布时间】:2022-11-28 17:09:00
【问题描述】:
我正在使用 Laravel 9,我制作了这个工厂,它将一些数据插入到Question && Category 模型之间的数据透视表中:
class CategoryQuestionFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
if(isset($counter)){
$question = Question::find($counter);
}else{
$counter = 1;
$question = Question::find($counter);
}
return [
'category_id' => $this->faker->numberBetween(1,22),
'question_id' => $question->id
];
$counter++;
}
}
基本上,当这个 Factory 第一次运行时,它会插入 question_id of1个和之间的随机数1个&22作为category_id。
但是因为我需要多次运行这个工厂(它应该运行 50 次),所以我将这段代码添加到DatabaseSeeder.php:
public function run()
{
for($i=0;$i<50;$i++){
(new CategoryQuestionFactory())->create();
}
}
但是因为下一次,我不想插入 question_id of1个再次,我定义了一个名为 $counter 的变量,它也在函数结束时递增(以获取下一个问题记录questions桌子):
if(isset($counter)){
$question = Question::find($counter);
}else{
$counter = 1;
$question = Question::find($counter);
}
return [
...
]
$counter++;
但现在的问题是,$counter 的值没有增加,因此,它插入1个共五十次。
所以问题是,我怎么能在Factory函数中定义一个变量,所以下次运行代码时,这个变量已经递增了,不需要从头开始。
更新:
【问题讨论】:
标签: php laravel laravel-9 laravel-seeding laravel-factory