嘗試從新聞文章回顯使用者名稱失敗,導致下列錯誤:
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', ...]; }
架構
控制器
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中文網其他相關文章!