如何播种与自身有关系的模型

How to seed a model that has a relationship to itself

我正在使用 Laravel 8 和 PHP v7.4 我有一个模型,其架构是通过以下迁移生成的。

CreateContestsTable

public function up()
{
    Schema::create('contests', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->foreignId('contest_id')->nullable();
        $table->foreign('contest_id')->references('id')->on('contests');
    });
}

一个contest可以有多个contests。为此,我生成了一个工厂 class.

竞赛工厂

public function definition()
{
    return [
        'name' => $this->faker->paragraph(),
    ];
}

竞赛播种机

public function run()
{
    \App\Models\Contest::factory(10)->create([
        'contest_id' => array_rand(\App\Models\Contest::all()->pluck('id')->toArray())
    ]);
}

以上抛出以下错误。

ErrorException array_rand(): Array is empty

我该如何解决这个问题?

当您进行查询以提取信息时,尚未创建记录。您可以调用不带参数的 create() 以便它创建记录,然后您可以迭代返回的 Collection:

\App\Models\Contest::factory(10)->create()->each(...);