Laravel 5.2.29 多对多关系无效

Laravel 5.2.29 Many to Many relationship not working

我正在尝试使用数据透视表 table 实现多对多关系。我的数据透视表 table 的名称是 "post_tag",列名称是 "post_id" 和 "tag_id"。 post 和标签模型 class 如下所示。

class Post extends Model
{
    protected $fillable = array(
        'title',
        'text',
        'active',
        'user_id'
    );

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

    public function comments()
    {
        return $this->hasMany('App\Comment');
    }

    public function tags()
    {
        return $this->hasMany('App\Post', 'post_id');
    }

}

标签class如下:

class Tag extends Model
{
    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}

post_tag table 如下所示:

post_id tag_id
1        1  
1        2  
2        1  

我正在使用以下代码尝试 post 的标签:

$user = User::find(1);
    foreach ($user->posts as $post) {
        foreach ($post->tags as $tag) {
            print $tag->title;
            print "<br>";
        }
        print "<br>";
    }

但是它抛出一个错误:

Connection.php 第 729 行中的 QueryException: SQLSTATE[42S22]:未找到列:1054 'where clause' 中的未知列 'posts.post_id'(SQL:select * 来自 posts,其中 posts.post_id = 1 并且 posts.post_id 不为空)

我想我错过了什么。谁能告诉我一下。

谢谢

您在 Post 模型的 tags() 方法中设置了错误的关系。应该是return $this->belongsToMany('App\Tag');

并且在标签模型的 posts() 方法中,您应该设置 return $this->belongsToMany('App\Post');

更多信息请见laravel docs