Laravel 5.2.29多对多关系不起作用

时间:2016-09-10 04:17:08

标签: php laravel-5 eloquent many-to-many

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

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 Tag extends Model
{
    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}

post_tag表格如下所示:

post_id tag_id
1        1  
1        2  
2        1  

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

$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子句'中的未知列'posts.post_id'(SQL:select * from posts其中postspost_id = 1和{{ 1}}。posts不为空)

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

由于

1 个答案:

答案 0 :(得分:1)

您在Post Model的with open('bloombergtest.csv', 'w', encoding='utf-8') as output_file: 方法中设置了错误的关系。它应该是tags()

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

有关详细信息,请参阅laravel docs