Maison > développement back-end > tutoriel php > Pourquoi est-ce que j'obtiens l'erreur « Essayer d'obtenir la propriété d'un non-objet » lors de l'accès au nom d'utilisateur dans l'article d'actualité de Laravel 5 ?

Pourquoi est-ce que j'obtiens l'erreur « Essayer d'obtenir la propriété d'un non-objet » lors de l'accès au nom d'utilisateur dans l'article d'actualité de Laravel 5 ?

Mary-Kate Olsen
Libérer: 2024-11-15 12:29:02
original
456 Les gens l'ont consulté

Why am I Getting

Unable to Access Object Property - Laravel 5

Issue Description

An attempt to echo out the name of a user from a News article is failing, resulting in the following error:

ErrorException: Trying to get property of non-object
Copier après la connexion

Code Context

Models

class News extends Model
{
    public function postedBy()
    {
        return $this->belongsTo('App\User');
    }
}

class User extends Model
{
    protected $fillable = ['name', ...];
}
Copier après la connexion

Schema

  • Table: users with a 'name' column
  • Table: news with a 'postedBy' column linking to users

Controller

public function showArticle($slug)
{
    $article = News::where('slug', $slug)->firstOrFail();
    return view('article', compact('article'));
}
Copier après la connexion

Blade Template

{{ $article->postedBy->name }}
Copier après la connexion

Explanation

The error occurs because the query in the controller (News::where('slug', $slug)->firstOrFail()) is returning an array, not an object. When trying to access ->postedBy on an array, the property is not recognized and the error is thrown.

To resolve the issue, you need to convert the array to an object before accessing the ->postedBy property. This can be done by using the findBySlug method on the News model instead of firstOrFail():

public function showArticle($slug)
{
    $article = News::findBySlug($slug); // Returns an object
    return view('article', compact('article'));
}
Copier après la connexion

This will allow you to successfully access the ->postedBy property on the object and display the user's name in the Blade template.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal