Laravel Eloquent关联查询报错Property [memoryof]不存在修复求助
Laravel Eloquent 关联查询问题修复
错误原因
- 预加载关联名与定义不匹配:
Event模型中定义的一对多关联方法名为memoryof,但查询时with()方法传入的关联名是memories,二者不一致导致预加载失败。 - 集合操作注意事项:
get()返回的是Event模型的集合对象,不可直接对整个集合调用关联属性,需遍历集合取出单个模型实例后再访问关联。
修复方案
方案1:保留现有关联方法名
直接修正查询语句的预加载关联名,同时建议使用SQL层面的orderBy替代集合排序,性能更优:
$events = Event::with('memoryof')->orderBy('created_at', 'desc')->get();
方案2:调整关联名符合Laravel命名规范(更推荐)
首先修改Event模型的关联方法名,符合一对多关联的复数命名习惯:
class Event extends Model { public function memories() { return $this->hasMany(MemoryOf::class); } }
修改后即可使用你原来的关联名写法查询:
$events = Event::with('memories')->orderBy('created_at', 'desc')->get();
关联访问说明
后续访问关联数据时,需要遍历集合获取单个模型后再操作:
foreach ($events as $event) { // 方案1用这个 $memoryList = $event->memoryof; // 方案2用这个 // $memoryList = $event->memories; }
内容的提问来源于stack exchange,提问作者Dan'l
相关产品推荐
相关产品推荐

