我试图从Eloquent查询中获取数据如下:
$submission->find($id)->first()->with('user', 'clientform')->get();
我将提交内容发送到视图并尝试访问user
模型中的属性,如下所示:
{{ $submission->clientform->name }}
然而,Laravel抛出以下错误:
Undefined property: Illuminate\Database\Eloquent\Collection::$clientform
我的查询格式化方式出错了什么?
答案 0 :(得分:2)
你太过分了!
让我们分解一下:
$submission->find($id);
将返回与主键为$id
的条目对应的模型实例。
$submission->find($id)->first();
这是一次不必要的重复; find
方法已经为您提供了一个条目,无需在其上调用first
。
$submission->find($id)->first()->with('user', 'clientform');
这是你开始走错路的地方;当使用模型进行调用时,Laravel会再次将该模型转换为查询构建器,即使已通过调用find
解决了该模型。
$submission->find($id)->first()->with('user', 'clientform')->get();
最后,get
方法将构建器解析为Illuminate\Support\Collection
,无论找到的条目数是多少(即,它可能只是一个项目的Collection
)。但值得注意的是,您的查询很可能已通过调用完全重置。它与实例化新的Submission
模型并使用它构建查询相同。这意味着您可能正在使用所有提交条目的集合,而不仅仅是$id
的提交条目。
长话短说,这就是你想要的:
$submission->with('user', 'clientform')->find($id);
它将获取匹配的$id
,并且user
和clientform
关系已加载。