Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何为与自身有关系的模型播种_Php_Laravel_Laravel 8_Laravel Seeding - Fatal编程技术网

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

Php 如何为与自身有关系的模型播种,php,laravel,laravel-8,laravel-seeding,Php,Laravel,Laravel 8,Laravel Seeding,我使用的是Laravel8和PHPV7.4,我有一个模型,其中的模式是通过下面的迁移生成的 CreateTestStable public function up() { Schema::create(‘竞赛’)函数(Blueprint$表){ $table->id(); $table->string('name'); $table->foreigned('contest_id')->nullable(); $table->foreign('contest_id')->references('i

我使用的是Laravel8和PHPV7.4,我有一个模型,其中的模式是通过下面的迁移生成的

CreateTestStable

public function up()
{
Schema::create(‘竞赛’)函数(Blueprint$表){
$table->id();
$table->string('name');
$table->foreigned('contest_id')->nullable();
$table->foreign('contest_id')->references('id')->on('contests');
});
}
一个
竞赛
可以有许多
竞赛
。为了实现这一点,我生成了一个工厂类

竞争工厂

公共函数定义()
{
返回[
'name'=>this->faker->段落(),
];
}
竞赛播种机

公共函数运行()
{
\应用程序\模型\竞赛::工厂(10)->创建([
'contest\u id'=>array\u rand(\App\Models\contest::all()->pulk('id')->toArray())
]);
}
上面的代码抛出以下错误

错误例外 数组\u rand():数组为空


如何解决此问题?

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

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

他们那时还没有被创造出来。。。您可以调用
create()->each(…)
在它们全部创建完毕后对它们进行迭代,ThoughThank@lagbox如果这是一个答案,我会接受的<代码>创建()->每个(…)都是我需要的