Envoyer la valeur en tant que paramètre à la classe d'usine
P粉378890106
P粉378890106 2024-01-03 14:42:16
0
1
430

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粉378890106
P粉378890106

répondre à tous(1)
P粉447785031

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();
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!