【问题标题】:How to seed a model that has a relationship to itself如何播种与自身有关系的模型
【发布时间】:2021-03-29 17:46:14
【问题描述】:

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

创建竞赛表

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。为此,我生成了一个工厂类。

竞赛工厂

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

上面会抛出以下错误。

错误异常 array_rand(): 数组为空

我该如何解决这个问题?

【问题讨论】:

  • 那时它们还没有被创建……你可以在它们全部创建后调用create()->each(...)来遍历它们
  • 谢谢@lagbox 如果这是我会接受的答案。 create()->each(...) 是我需要的

标签: php laravel laravel-8 laravel-seeding


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多