首页  >  文章  >  后端开发  >  为什么在 Laravel 5 新闻文章中访问用户名时出现'尝试获取非对象的属性”错误?

为什么在 Laravel 5 新闻文章中访问用户名时出现'尝试获取非对象的属性”错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-15 12:29:02344浏览

Why am I Getting

无法访问对象属性 - Laravel 5

问题描述

尝试从新闻文章中回显用户名失败,导致以下错误:

ErrorException: Trying to get property of non-object

代码上下文

模型

class News extends Model
{
    public function postedBy()
    {
        return $this->belongsTo('App\User');
    }
}

class User extends Model
{
    protected $fillable = ['name', ...];
}

架构

  • 表:具有“名称”列的用户
  • 表:具有链接到用户的“postedBy”列的新闻

控制器

public function showArticle($slug)
{
    $article = News::where('slug', $slug)->firstOrFail();
    return view('article', compact('article'));
}

Blade Template

{{ $article->postedBy->name }}

说明

发生错误是因为控制器中的查询 (News::where('slug' , $slug)->firstOrFail()) 返回一个数组,而不是一个对象。尝试访问数组上的 ->postedBy 时,无法识别该属性并抛出错误。

要解决此问题,需要在访问 ->postedBy 之前将数组转换为对象财产。这可以通过在 News 模型上使用 findBySlug 方法而不是 firstOrFail() 来完成:

public function showArticle($slug)
{
    $article = News::findBySlug($slug); // Returns an object
    return view('article', compact('article'));
}

这将允许您成功访问对象上的 ->postedBy 属性并在中显示用户名Blade 模板。

以上是为什么在 Laravel 5 新闻文章中访问用户名时出现'尝试获取非对象的属性”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn