使用关系显示Eloquent集合中的数据

时间:2016-03-23 21:13:54

标签: laravel laravel-5 eloquent blade laravel-5.2

我试图从Eloquent查询中获取数据如下:

$submission->find($id)->first()->with('user', 'clientform')->get();

我将提交内容发送到视图并尝试访问user模型中的属性,如下所示:

{{ $submission->clientform->name }}

然而,Laravel抛出以下错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$clientform

我的查询格式化方式出错了什么?

1 个答案:

答案 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,并且userclientform关系已加载。