Php 如何为与自身有关系的模型播种
我使用的是Laravel8和PHPV7.4,我有一个模型,其中的模式是通过下面的迁移生成的 CreateTestStablePhp 如何为与自身有关系的模型播种,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
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如果这是一个答案,我会接受的<代码>创建()->每个(…)都是我需要的