2017-10-19 6 views
0

Je suis confus sur la façon dont je devrais nommer ma méthode dans un modèle. Je sais que dans la documentation de Laravel Eloquent cela suppose d'être pluriel mais dans certains cas, cela me donne des erreurs. par exemple, j'ai cette requête:Convention de nommage pour la méthode de relation Eloquent

$posts = Post::with(['comments','user', 'tag'])->findOrFail($id); 

puis j'imprimer les résultats comme celui-ci:

echo "<h1>".$posts->title.'</h1>'; 
    echo "<h2> created by: ".$posts->user->name.'</h2>'; 
    echo "<p>".$posts->body."</p>"; 
    //echo $posts->comments; 
    echo '<h3>Komentar :</h3>'; 
    foreach ($posts->comments as $comment) { 
     echo $comment->body.'<br>'; 
    } 
    echo '<h3>Tags :</h3>'; 
    foreach ($posts->tags as $tag) { 
     echo '<a href="/tag/'. $tag->id .'">'.$tag->name.'</a><br>'; 
    } 

il me donner une erreur:

"Call to undefined relationship [tag] on model [App\Post]." 

mais quand je change " Les balises "fonctionnent à l'intérieur de Post Model en" tag ", les problèmes ont disparu. donc quelqu'un peut-il expliquer ce que c'est une convention de nom pour cela? Merci.

pour plus d'informations, voici mon modèle post:

class Post extends Model 
{ 
    /** 
    * Get the comments for the blog post. 
    */ 
    public function comments() 
    { 
     return $this->hasMany('App\Comment'); 
    } 

    public function user(){ 
     return $this->belongsTo('App\User'); 
    } 

    public function tags(){ 
     return $this->belongsToMany('App\Tag'); 
    } 
} 
+0

s'il vous plaît poster votre modèle POST aussi. –

+0

fait. J'ai ajouté mon modèle en question. – Ying

+0

Parce que votre relation a été nommée 'tags' et non 'tag' ... Vous utilisez le nom de la relation dans with(). Vous pouvez les nommer comme vous voulez, juste être cohérent. – Devon

Répondre

2

Il semble que vous utilisez tout simplement singulier ici $posts = Post::with(['comments','user', 'tag'])->findOrFail($id);

Et vous utilisez pluriel ici foreach ($posts->tags as $tag) {

Essayez d'utiliser au pluriel dans votre premier exemple aussi: Post::with(['comments','user', 'tags'])

+0

cela fonctionne. Je vais sélectionner votre réponse dans les 5 prochaines minutes, merci. – Ying

+0

oh maintenant j'ai quelques erreurs quand je change mes 'utilisateurs' en utilisateur savez-vous ce qui s'est passé? – Ying

+0

Où exactement changez-vous «utilisateurs» en «utilisateur»? Dans votre exemple, je ne vois que la forme singulière. – Tudor