Ein Versuch, den Namen eines Benutzers aus einem News-Artikel wiederzugeben, schlägt fehl , was zu folgendem Fehler führt:
ErrorException: Trying to get property of non-object
Modelle
class News extends Model { public function postedBy() { return $this->belongsTo('App\User'); } } class User extends Model { protected $fillable = ['name', ...]; }
Schema
Controller
public function showArticle($slug) { $article = News::where('slug', $slug)->firstOrFail(); return view('article', compact('article')); }
Blade Template
{{ $article->postedBy->name }}
Der Fehler tritt auf, weil die Abfrage im Controller (News::where('slug' , $slug)->firstOrFail()) gibt ein Array zurück, kein Objekt. Wenn Sie versuchen, auf ->postedBy in einem Array zuzugreifen, wird die Eigenschaft nicht erkannt und der Fehler wird ausgegeben.
Um das Problem zu beheben, müssen Sie das Array in ein Objekt konvertieren, bevor Sie auf ->postedBy zugreifen Eigentum. Dies kann durch die Verwendung der findBySlug-Methode im News-Modell anstelle von firstOrFail() erfolgen:
public function showArticle($slug) { $article = News::findBySlug($slug); // Returns an object return view('article', compact('article')); }
Dadurch können Sie erfolgreich auf die ->postedBy-Eigenschaft des Objekts zugreifen und den Namen des Benutzers anzeigen die Blade-Vorlage.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Zugriff auf den Benutzernamen im Laravel 5-Nachrichtenartikel die Fehlermeldung „Es wird versucht, die Eigenschaft eines Nichtobjekts abzurufen'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!