Eloquent关系方法的命名约定

时间:2017-10-19 13:31:19

标签: php laravel laravel-5 eloquent

我对如何在模型中命名我的方法感到困惑。我知道在Laravel Eloquent文档中它假设是Plural但在某些情况下,它给了我错误。例如,我有这个查询:

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

然后我打印出这样的结果:

    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>';
    }

它给我一个错误:

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

但是当我改变我的&#34;标签&#34;将Post Model中的函数转换为&#34; tag&#34;问题消失了。所以有人可以解释一下这个名称的约定是什么吗?感谢。

有关详细信息,请参阅我的帖子模型:

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');
    }
}

1 个答案:

答案 0 :(得分:2)

您似乎在这里使用单数$posts = Post::with(['comments','user', 'tag'])->findOrFail($id);

你在这里使用复数foreach ($posts->tags as $tag) {

尝试在第一个示例中使用复数形式:Post::with(['comments','user', 'tags'])