Mysql
 sql >> Base de données >  >> RDS >> Mysql

Laravel appartient à lancer une erreur indéfinie

Après avoir aidé via le chat, le problème était qu'il y avait une colonne existante appelée group , et la méthode de relation était également appelée group , de sorte que la valeur de la colonne de table prévalait sur la méthode de relation.

Renommer la méthode de relation, ou le group colonne à quelque chose comme group_id sont les deux solutions appropriées (je suggérerais le group_id itinéraire).

Réponse originale :

Vous récupérez le groupe via une propriété magique, pas directement à partir de la méthode.

echo User::find(1)->group->name;

Si vous récupérez le group() méthode, il renverra l'objet de relation, n'effectuera aucune requête et récupérera l'objet de relation.

En outre, Eloquent fera des hypothèses sur les noms de vos colonnes de clé étrangère. Group se traduirait automatiquement en un group_id colonne. Si vous avez une colonne existante appelée group , alors vous devez le spécifier explicitement dans votre relation :

public function group () 
{
    return $this->belongsTo('Group', 'group');
}

Si vous recevez une erreur "Trying to get property of non-object" pour la propriété group , alors votre relation ne renvoie aucun résultat ($user->group sera NULL ). À ce stade, vous devez vous assurer que votre relation est correctement configurée (par exemple, en utilisant les bons namesTo, hasOne, hasMany, etc.) et vous assurer que vous avez réellement une entrée associée dans votre base de données.