【问题标题】:Laravel 5.2.29 Many to Many relationship not workingLaravel 5.2.29 多对多关系不起作用
【发布时间】:2017-01-18 05:59:18
【问题描述】:

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

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 where posts.post_id = 1 和 posts.post_id 是不为空)

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

谢谢

【问题讨论】:

  • Post 模型上的 tags 方法必须连接到 App/Tag 而不是 App/Post

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


【解决方案1】:

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

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

更多信息可以在laravel docs查看

【讨论】:

  • 嗨,我修改了方法,如下所示: public function tags() { return $this->hasMany('App\Tag');但它仍然不起作用。它现在给了我这个错误: Connection.php 第 729 行中的 QueryException:SQLSTATE[42S22]:找不到列:1054 'where 子句'中的未知列 'tags.post_id'(SQL:select * from tags where tags .post_id = 1 和 tags.post_id 不为空)
  • 您应该使用belongsToMany 方法查看更新的答案
  • 谢谢@Follio。建议的更改对我有用。
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
相关资源
最近更新 更多