【问题标题】:Laravel 6.2 can't get property of data retrieved from databaseLaravel 6.2 无法获取从数据库中检索到的数据的属性
【发布时间】:2019-12-03 20:43:41
【问题描述】:

我有一个关于在 Laravel 中显示我的数据库中的数据的问题。 我收到以下错误:

试图获取非对象的属性“first_name”

指的是这行代码:

 @foreach ($contact as $c)
    <h1 class="display-4">Bekijk details voor contact: {{ $c->first_name }} {{ $c->last_name }}</h1>
 @endforeach

我使用 Laravel 的“显示”功能从我的数据库中获取这些数据,如下所述:

public function show($id)
{
    $contact = Contact::find($id);

    return view('contacts.show', compact('contact'));
}

我的路由如下所示:

Route::resource('contacts', 'ContactController');

我无法解决这个错误的原因是因为它似乎适用于其他功能,如 Laravel 的“编辑”功能,如下所述:

public function edit($id)
{
    $contact = Contact::find($id);

    return view('contacts.edit', compact('contact'));
}

任何帮助将不胜感激,我想知道为什么它不适用于我的“显示”功能,而它却适用于我的“编辑”功能,有什么我不知道的差异吗?

提前致谢!

亲切的问候,

吉尔特-扬·克纳彭

【问题讨论】:

  • 你能在dd($contact) 中同时获得showedit 吗?并向我们​​展示结果?

标签: php mysql laravel laravel-6.2


【解决方案1】:

很可能,$contactobject 而不是collection,因此您不需要循环遍历它。您可以直接访问它。

<h1 class="display-4">Bekijk details voor contact: {{ $contact ->first_name }} {{ $contact ->last_name }}</h1>

更新最好使用route model binding,这样如果联系人不存在就会处理。

public function show(Contact $contact)
{
    return view('contacts.show', compact('contact'));
}

【讨论】:

  • 是的; find() 返回单个记录,或 null。如果$contactnull,这仍然会失败,因为null-&gt;first_name (显然)无效,但您对Collection 与实例的关系是正确的。
  • 不错,看起来不错!另一个选项是findOrFail(),或手动检查$contact,如if(!$contact){ abort(404); }(或类似)
  • @TimLewis 是的,有几个选项。
  • 谢谢,使用$contact-&gt;first_name 确实有效。不过我很好奇的是,我 100% 确定 $contact 不为空,所以在理论上不应该循环遍历它吗?
  • @geertjanknapen 我想你很困惑,find,route model binding,findOrFail() 和其他类似的方法,只返回单个recoed。所以你确实需要遍历它,它不是collection。所以你可以直接访问它。
猜你喜欢
  • 1970-01-01
  • 2020-12-28
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
相关资源
最近更新 更多