ニュース記事からユーザーの名前をエコーアウトしようとして失敗します、次のエラーが発生します:
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 にアクセスする前に配列をオブジェクトに変換する必要があります。財産。これは、firstOrFail() の代わりに News モデルで findBySlug メソッドを使用することで実行できます。
public function showArticle($slug) { $article = News::findBySlug($slug); // Returns an object return view('article', compact('article')); }
これにより、オブジェクトの ->postedBy プロパティに正常にアクセスし、ユーザー名を表示できるようになります。 Blade テンプレート。
以上がLaravel 5 ニュース記事でユーザー名にアクセスすると「非オブジェクトのプロパティを取得しようとしています」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。