首頁  >  文章  >  後端開發  >  為什麼在 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'));
}

刀片模板

{{ $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