ホームページ  >  記事  >  バックエンド開発  >  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', ...];
}

スキーマ

  • テーブル: '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 にアクセスする前に配列をオブジェクトに変換する必要があります。財産。これは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。