当前位置: 首页 > 知识库问答 >
问题:

拉威尔5.2。29多对多关系不起作用

马晓博
2023-03-14

我正在尝试使用透视表实现多对多关系。我的透视表的名称是“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>";
    }

但它抛出了一个错误:

查询连接中的异常。php第729行:SQLSTATE[42S22]:未找到列:1054个未知列的“posts”。where子句中的post\u id'(SQL:select*frompostswherepostspost\u id=1和postspost\u id不为空)

我想我遗漏了什么。有人能告诉我吗。

谢谢

共有1个答案

章越
2023-03-14

您在Post模型的tags()方法中设置了错误的关系。它应该是返回$this-

在Tag Model的post()方法中,您应该设置返回$this-

有关更多信息,请参见laravel文档

 类似资料:
  • 我有一个奇怪的问题。 我有一个用户表和一个公司表。一个用户属于一家公司,而一家公司有许多用户。 表的两个主键都是id。 在laravel文档中,我阅读了以下内容: 此外,Eloquent假设外键的值应该与父项的id列匹配。 我在我的

  • 是否可以在比1级更深的级别上进行具有雄辩能力的多级关系查询?我的桌子是这样的: post_comments- 发表评论或回复- 使用者- 用户数据- 所以我想问是不是有可能得到一个帖子的评论与所有的回复和用户数据的人谁回答了评论1查询与雄辩。 这就是我的评论模型的样子: 当我得到一条评论的所有用户数据时,我想得到回复者的所有用户数据。我真的很抱歉,如果这个问题已经在其他地方发布或记录,但我似乎无法

  • 我想要模型 电影 如果只是电影 更新:有关环境和我的尝试的更多详细信息。 我创建了电影,人物,角色和查找表movie_person_role(又名三支点): 方法: 播种机: (可能有更清晰的定义种子的方法) 这正确地将例如"Roel Reiné"作为"导演"链接到"Redbad"。 剩余内容:如何获取电影中的人物角色列表? 目前的状态是,我可以得到的人(没有他们的角色): 修补匠: 这就给了《红

  • 表朋友:id、用户id、朋友id。 表用户配置文件:id、用户id、名字。。。 如何通过雄辩的ORM获得用户的朋友列表? 用户id:5 |朋友id:6 user_id: 6|friend_id5 类似问题: 与拉拉维尔的友谊系统:多对多关系 拉维尔 我无法理解是谁调用了getFriendsAttribute()方法。 以及如何做到这一点查询生成器。 谢谢

  • 我的情况是,我有帖子、用户和评论。 每个评论都存储一个post_id和一个user_id。我要做的是获取用户对特定帖子的所有评论,这样我就可以进行如下调用: (我知道x是什么) 我有: 我觉得需要有一个where或have或where have或是什么东西。。我能做的最好的事情就是拉Auth::User()-

  • 是否有一种方法可以将范围添加到BelongsTo很多字段,以便在附加相关模型时只能从受限选项中执行此操作? 例子: 发布物品到许多标签(使用Sploe/Laravel-Tags)。标签属性到许多帖子。 标签模型具有id、名称、段塞、类型和时间戳属性。 在细节或更新视图上,我希望能够将标签附加到Post。 使用Post资源上的默认BelongToMany字段(或第三方包),我可以向Post添加标记。