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

时间:2018-09-11 16:20:52

标签: php database laravel many-to-many laravel-5.6

我正在Laravel 5.6模型中建立多对多关系,但是由于我没有遵循Laravel的命名约定,因此我肯定在表/外键名称上犯了一个错误,使其无法正常工作。

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

  1. blog_posts收集所有帖子信息(idtitlearticle等)
  2. blog_tags定义可用于标记帖子的标签(idname
  3. blog_posts_tags是创建表和标签(idpost_idtag_id)之间关系的数据透视表

如前所述,我正在尝试在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 个答案:

答案 0 :(得分:2)

$post->tags()返回带有查询生成器的关联实例。

如果要获取相关的标签值,只需使用关系名称

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

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