You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8运行Seeder报Property [id]不存在于集合实例错误如何解决

问题根源

调用\App\Models\User::factory()->count(30)->create()时,返回结果是包含30个用户模型的Illuminate\Database\Eloquent\Collection集合实例,并非单个用户对象,直接访问$user->id会因为集合不存在该属性触发报错。

解决方案

根据你的实际需求选择对应修改方案:

方案1:所有课程归属同一个测试用户

如果不需要多用户关联,直接将创建30个用户的逻辑改为创建单个用户即可:

public function run()
{
    // 创建单个用户,返回单例模型可直接访问id属性
    $user = \App\Models\User::factory()->create();
    \App\Models\Course::factory()->count(5)->create(['user_id' => $user->id ])->each(function ($course) {
        \App\Models\Episode::factory()->count( rand(6 , 20))->make()->each(function ($episode , $key) use ($course){
            $episode->number = $key +1;
            $course->episodes()->save($episode);
        });
    });
}

方案2:保留30个用户,课程随机关联用户

如果确实需要生成30个测试用户,从用户集合中随机取一个用户的id赋值即可:

public function run()
{
    $users = \App\Models\User::factory()->count(30)->create();
    // 从30个用户里随机取一个的id绑定到课程
    \App\Models\Course::factory()->count(5)->create(['user_id' => $users->random()->id ])->each(function ($course) {
        \App\Models\Episode::factory()->count( rand(6 , 20))->make()->each(function ($episode , $key) use ($course){
            $episode->number = $key +1;
            $course->episodes()->save($episode);
        });
    });
}

注意:修改前请确认Course模型的$fillable属性中已包含user_id字段,避免触发批量赋值屏蔽错误。

内容的提问来源于stack exchange,提问作者xabise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:39:03