Hantar nilai sebagai parameter ke kelas kilang
P粉378890106
P粉378890106 2024-01-03 14:42:16
0
1
498

Saya perlu mengusahakan kilang 50 次,因此在 DatabseSeeder Dalaman:

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

Seperti yang anda lihat, saya cuba menamakan kelas $i 的变量作为参数传递给 CategoryQuestionFactory.

Kemudian di kilang ini saya mencuba ini:

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

Tetapi apabila saya menjalankan php artisan db:seed di terminal, saya mendapat ralat ini:

Panggil talian paip fungsi ahli() pada null

Dalam C:xampphtdocsforumrootvendorlaravelframeworksrcIlluminateDatabaseEloquentFactoriesFactories.php:429

Jadi apa yang berlaku di sini? Bagaimana untuk menghantar nilai dengan betul sebagai parameter ke kelas kilang?

Selain itu, dalam IDE kaedah __construct kilang, saya mendapat mesej berikut:


KEMASKINI #1:

Berikut ialah tangkapan ralat dalam IDE:

P粉378890106
P粉378890106

membalas semua(1)
P粉447785031

Nampaknya anda ingin menyemai jadual perantaraan. Terdapat beberapa kaedah yang boleh anda gunakan semasa menyemai benih, salah satunya ialah has() iaitu kaedah yang sering saya gunakan.

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

Andaikan anda ingin mencipta 100 soalan dan 5 kategori

/**
* 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();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan