【问题标题】:How to increment variable defined at a Factory如何增加在工厂定义的变量
【发布时间】: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


    【解决方案1】:

    Laravel 8 引入了新的工厂类,所以你的请求可以像这样:

    class CategoryQuestionFactory extends Factory {
    
        private static $questionId = 1;
    
        protected $model = Question::class;
    
        public function definition() {
             $question = Question::find(self::$questionId);
    
             return [
                'category_id' => $this->faker->numberBetween(1,22),
                'question_id' => $question->id
            ];
    
            self::$questionId++;
        }
    

    【讨论】:

    • 它说QuestionFactory.php:27 第 11 行未关闭的“{”
    • 我还添加了一个更新问题
    • 我更新了我的答案
    猜你喜欢
    • 2020-09-25
    • 2015-09-19
    • 2023-01-31
    • 2011-11-20
    • 2021-04-19
    • 2015-10-17
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多