php - 拉拉维尔 5.6 : Many-to-many relationship returns empty object

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

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

我与博客部分相关的表格都有一个 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();

我哪里错了?

最佳答案

$post->tags() 返回与查询生成器相关的实例。

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

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

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

关于php - 拉拉维尔 5.6 : Many-to-many relationship returns empty object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52280279/

相关文章:

php - MySQL 内部加入不等于运算符

php - 使用 Javascript 添加一个选择框;到由 PHP 填充的 html 表单

mysql - 在数据库书架中创建表,其中一本书可以有多个类别

api - 如何在 Laravel 中调用端点时模拟注入(inject) Controller 的对象?

php - PHP 和 MySQL 中的当前时间戳

php - Gettext (i18n) 和 Smarty 运行不稳定

database - 由于缺乏 ENUM 支持,CakePHP 的数据库表过多

sql - 使用显式 create table 语句与 select into 创建表

php - 拉维尔 6.4 : __toString() must return a string value

php - 如何在 LARAVEL 中不使用 PHP 的 "compact"函数的情况下使用 View