【问题标题】:Displaying Data from an Eloquent collection with Relations使用关系显示来自 Eloquent 集合的数据
【发布时间】:2016-07-11 08:54:22
【问题描述】:

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

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

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

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

但是,Laravel 抛出以下错误:

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

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

【问题讨论】:

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


    【解决方案1】:

    你做得太过分了!

    让我们分解一下:

    $submission->find($id);
    

    将返回与主键为$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 关系。

    【讨论】:

    • 感谢您的简洁解释!这解决了我所有的问题。
    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2021-12-05
    • 2021-08-11
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多