首页 文章

Laravel 5.6:多对多关系返回空对象

提问于
浏览
2

我在Laravel 5.6模型中 Build 了多对多的关系,但是,由于我没有遵循Laravel的命名约定,我肯定在表/外键名称上犯了一个错误,使其无效 .

我与博客部分相关的表都有一个 blog_ 前缀:

  • blog_posts 收集所有帖子信息( idtitlearticle 等)

  • blog_tags 定义了可用于标记帖子的标签( idname

  • blog_posts_tags 是创建帖子和标签之间关系的数据透视表( idpost_idtag_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 回答

  • 2

    $post->tags() 返回带有查询构建器的相关实例 .

    如果你想获得相关的标签值,只需使用关系名称

    示例: $tags = $post->tags;

    foreach($tags as $tag){
       var_dump($tag);
    }
    

相关问题