我正在使用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第一次执行时,它会插入1的question_id
,以及1和22之间的随机数作为category_id
。
但是因为我需要多次运行这个工厂(它应该运行50次),所以我将以下代码添加到**DatabaseSeeder.php
**:
public function run()
{
for($i=0;$i<50;$i++){
(new CategoryQuestionFactory())->create();
}
}
但是,因为接下来我不想再次插入1的question_id
,所以我定义了一个名为$counter
的变量,它也会在函数结束时递增(以获取 questions
表中问题的下一条记录):
if(isset($counter)){
$question = Question::find($counter);
}else{
$counter = 1;
$question = Question::find($counter);
}
return [
...
]
$counter++;
但现在的问题是,$counter
的值没有增加,因此,它在所有50次中插入1。
因此,问题是,如何在Factory函数中定义变量,以便下次运行代码时,此变量已经递增,无需从头开始。
1条答案
按热度按时间5sxhfpxr1#
Laravel 8引入了新的工厂类,因此您的请求可以看起来像:
在数据库播种程序中添加以下内容