Laravel 5 ニュース記事でユーザー名にアクセスすると「非オブジェクトのプロパティを取得しようとしています」エラーが発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-15 12:29:02
オリジナル
345 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート