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

Displaying Data from an Eloquent collection with Relations

我正在尝试从 Eloquent 查询中获取数据,如下所示:

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

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

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

但是,Laravel 抛出以下错误:

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

我的查询格式化方式有什么问题?

你过分了!

让我们分解一下:

$submission->find($id);

将 return 对应于具有 $id 主键的条目的模型实例。

$submission->find($id)->first();

这是不必要的重复; find 方法已经为您提供了一个条目,无需对其调用 first

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

这是你开始走错路的地方;在模型上调用 with 时,Laravel 将再次将该模型转换为查询构建器,即使它已经通过调用 find.

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

最后,get 方法将构建器解析为 Illuminate\Support\Collection,而不管找到的条目数(即它可能是只有一个项目的 Collection)。不过,值得注意的是,您的查询很可能已通过调用 with 完全重置。这与实例化一个新的 Submission 模型并使用它构建查询是一样的。这意味着您可能正在使用 所有 提交条目的集合,而不仅仅是带有 $id.

的条目

长话短说,这就是你想要的:

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

它将获取匹配的 $id,并预先加载 userclientform 关系。