Rumah  >  Soal Jawab  >  teks badan

Hantar nilai sebagai parameter ke kelas kilang

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粉378890106P粉378890106313 hari yang lalu477

membalas semua(1)saya akan balas

  • P粉447785031

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

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

    balas
    0
  • Batalbalas