Maison  >  Questions et réponses  >  le corps du texte

Envoyer la valeur en tant que paramètre à la classe d'usine

Je dois diriger une usine 50 次,因此在 DatabseSeeder À l'intérieur :

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

Comme vous pouvez le voir, j'ai essayé de nommer la classe $i 的变量作为参数传递给 CategoryQuestionFactory.

Puis dans cette usine, j'ai essayé ceci :

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
        ];
    }
}

Mais lorsque j'exécute php artisan db:seed dans le terminal, j'obtiens cette erreur :

Appelez la fonction membre pipeline() sur null

Dans C:xampphtdocsforumrootvendorlaravelframeworksrcIlluminateDatabaseEloquentFactoriesFactory.php:429

Alors, qu'est-ce qui n'a pas fonctionné ici ? Comment envoyer correctement des valeurs en tant que paramètres aux classes d'usine ?

De plus, dans l'IDE de la méthode __construct de l'usine, j'obtiens le message suivant :


MISE À JOUR #1 :

Voici la capture d'erreur dans l'EDI :

P粉378890106P粉378890106264 Il y a quelques jours436

répondre à tous(1)je répondrai

  • P粉447785031

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

    Il me semble que vous souhaitez ensemencer le tableau intermédiaire. Il existe quelques méthodes que vous pouvez utiliser pour semer des graines, l'une d'elles est has() qui est la méthode que j'utilise souvent.

    /**
    * 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();

    Supposons que vous souhaitiez créer 100 questions et 5 catégories

    /**
    * 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();

    répondre
    0
  • Annulerrépondre