使用关系显示 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
,并预先加载 user
和 clientform
关系。
我正在尝试从 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
,并预先加载 user
和 clientform
关系。