我在Laravel 5.6模型中 Build 了多对多的关系,但是,由于我没有遵循Laravel的命名约定,我肯定在表/外键名称上犯了一个错误,使其无效 .
我与博客部分相关的表都有一个 blog_
前缀:
-
blog_posts
收集所有帖子信息(id
,title
,article
等) -
blog_tags
定义了可用于标记帖子的标签(id
,name
) -
blog_posts_tags
是创建帖子和标签之间关系的数据透视表(id
,post_id
,tag_id
)
如上所述,我正在努力 Build Laravel的关系:
型号: BlogPost.php
/**
* The tags that belong to the post.
*/
public function tags()
{
return $this->belongsToMany('App\BlogTag', 'blog_posts_tags', 'post_id', 'tag_id');
}
型号: BlogTag.php
/**
* The posts that belong to the tag.
*/
public function posts()
{
return $this->belongsToMany('App\BlogPost', 'blog_posts_tags', 'tag_id', 'post_id');
}
问题是,当我调用 tags()
方法时,返回的对象里面没有标签:
$post = BlogPost::find($id);
$tags = $post->tags();
我哪里错了?
1 回答
$post->tags()
返回带有查询构建器的相关实例 .如果你想获得相关的标签值,只需使用关系名称
示例:
$tags = $post->tags;