如何播种与自身有关系的模型
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(...);
我正在使用 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(...);