因此,我有一个posts
表和一个相应的Post
模型。我希望每个帖子都有相关的帖子。由于帖子可以包含许多其他相关帖子,因此posts
表和posts
表(同一表)之间是多对多的关系。
因此,我创建了一个related_posts
数据透视表及其相应的模型RelatedPost
。我想在两个模型中定义这种关系。像这样:
发布模型:
public function related()
{
return $this->belongsToMany(RelatedPost::class, 'related_posts', 'related_id', 'post_id');
}
相关帖子模型:
public function posts()
{
return $this->belongsToMany(Post::class, 'related_posts', 'post_id', 'related_id');
}
现在,在选择特定帖子后,在我的帖子控制器中,我想获取所有与其相关的帖子。所以我这样做:
$post->related()->get();
但是当我这样做时,我收到以下错误消息:
“ SQLSTATE [42000]:语法错误或访问冲突:1066不是唯一的表/别名:'related_posts'(SQL:选择
related_posts
。*,related_posts
。related_id
作为{ {1}},pivot_related_id
。related_posts
为{{1}上post_id
内部联接pivot_post_id
的{{1}}。related_posts
= {{ 1}}。related_posts
,其中related_posts
。id
= 1)“
这是我对数据透视表的迁移:
related_posts
我到处搜索,尽管找到的解决方案确实很有意义,但我无法让其中任何一个发挥作用。
任何帮助将不胜感激!
答案 0 :(得分:1)
感谢@ d3jn对我的问题的评论,我得以解决我的问题。因此,我将解决方案发布在这里,以防万一其他人可能需要它。
我将Post
模型与其自身相关,而不与枢纽模型RelatedPost
相关。因此,我不需要RelatedPost
模型。我只需要数据透视表(related_post
),关系的id
即related_id
和post_id
。
因此,在保持迁移不变的情况下,我只需要取消RelatedPost
模型,并在related()
模型中更改我的Post
方法,如下所示:
public function related()
{
return $this->belongsToMany(Post::class, 'related_posts', 'post_id', 'related_id');
}
现在一切正常。