Percubaan untuk menggemakan nama pengguna daripada artikel Berita gagal , mengakibatkan ralat berikut:
ErrorException: Trying to get property of non-object
Model
class News extends Model { public function postedBy() { return $this->belongsTo('App\User'); } } class User extends Model { protected $fillable = ['name', ...]; }
Skema
Pengawal
public function showArticle($slug) { $article = News::where('slug', $slug)->firstOrFail(); return view('article', compact('article')); }
Templat Bilah
{{ $article->postedBy->name }}
Ralat berlaku kerana pertanyaan dalam pengawal (News::where('slug', $slug)->firstOrFail()) sedang mengembalikan tatasusunan, bukan objek. Apabila cuba mengakses ->postedBy pada tatasusunan, harta itu tidak dikenali dan ralat dilemparkan.
Untuk menyelesaikan isu, anda perlu menukar tatasusunan kepada objek sebelum mengakses ->postedBy harta benda. Ini boleh dilakukan dengan menggunakan kaedah findBySlug pada model Berita dan bukannya firstOrFail():
public function showArticle($slug) { $article = News::findBySlug($slug); // Returns an object return view('article', compact('article')); }
Ini akan membolehkan anda berjaya mengakses harta ->postedBy pada objek dan memaparkan nama pengguna dalam templat Blade.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Mencuba untuk mendapatkan harta bukan objek' Semasa Mengakses Nama Pengguna dalam Artikel Berita Laravel 5?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!