首頁  >  問答  >  主體

將值作為參數傳送到工廠類

我需要運行工廠 50 次,因此在 DatabseSeeder 內:

public function run()
{
    for($i=1;$i<=50;$i++){
       (new CategoryQuestionFactory($i))->create();
    }
}

如您所看到的,我嘗試將名為 $i 的變數作為參數傳遞給 CategoryQuestionFactory 類別。

然後在這家工廠,我嘗試了這個:

class CategoryQuestionFactory extends Factory
{
    protected $counter;

    public function __construct($c)
    {
        $this->counter = $c;
    }
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition()
    {
        $question = Question::find($this->counter);

        return [
            'category_id' => $this->faker->numberBetween(1,22),
            'question_id' => $question->id
        ];
    }
}

但是當我在終端機上執行 php artisan db:seed 時,出現此錯誤:

在 null 上呼叫成員函數 pipeline()

#

在 C:xampphtdocsforumrootvendorlaravelframeworksrcIlluminateDatabaseEloquentFactoriesFactory.php:429

那麼這裡出了什麼問題呢?如何正確地將值作為參數傳送給工廠類別?

此外,在該工廠的 __construct 方法的 IDE 中,我收到以下訊息:


更新#1:

#

以下是 IDE 中的錯誤捕獲:

P粉378890106P粉378890106313 天前472

全部回覆(1)我來回復

  • P粉447785031

    P粉4477850312024-01-04 13:12:02

    在我看來,你想為中間表播種。播種時可以使用一些方法,其中之一是 has(),這是我經常使用的方法。

    /**
    * will create a one question and 3 category then create a data in the intermediate table. 
    * expected data : 
    * question_id | category_id
    *     1            1
    *     1            2
    *     1            3
    */
    Question::factory()->has(
        Category::factory()->count(3)
    )->create();

    假設您想要建立 100 個問題和 5 個類別

    /**
    * will create a 100 question and 5 category then create a data in the intermediate table. 
    * expected data : 
    * question_id | category_id
    *     1            1
    *     1            2
    *     1            3
    *     1            4
    *     1            5
    *     2            1
    *     2            2
    *     2            3
    *     2            4
    *     2            5
    * until the 100th question will have a 5 categories
    */
    Question::factory(100)->has(
        Category::factory()->count(5)
    )->create();

    回覆
    0
  • 取消回覆