Laravel 3张桌子之间的关系

时间:2018-12-16 20:27:31

标签: php laravel eloquent relationship

所以我想获取类别名称,这就是我所拥有的 平板电脑:

  

类别:ID,名称

     

post_categories :id,post_id,category_id

     

发布:ID,列

我有以下模型:PostPostCategoryCategory

发布模型:

public function categories()
{
    return $this->hasMany('App\PostCategory');
}

PostCategory模型:

public function category()
{
    return $this->hasMany(Category::class, 'id', 'category_id');
}

在我拥有的控制器中

return Post::with('categories.category')->orderby('id','desc')->get();

我的结果是

 [
  {
    "id": 50,
    "categories": [
      {
        "id": 92,
        "category_id": 11,
        "category": [
          {
            "id": 11,
            "name": "JXrfLHdQVNON",
            "image": null
          }
        ]
      }
    ]
  }
]

我希望它像

[
  {
    "id": 50,
    "categories": [
      {
        "id": 1,
        "name": "category_name",
        "image": null
      }
    ]
  }
]

有办法吗?我一直在玩这个游戏,还没有设法找到一种简单的方法

2 个答案:

答案 0 :(得分:1)

您的Post模型内部:

 public function categories()
 {
        return $this->belongsToMany('App\Model\Category','post_categories','post_id','category_id')->withTimestamps();
 }

在您的控制器中:

return Post::with('categories:id,name,image')->orderBy('id','desc')->get();

答案 1 :(得分:0)

这是一个多对多的关系。确保您的关系建立正确。如果要选择特定的列,可以执行以下操作:

return Post::with('categories.category:id,name')->orderby('id','desc')->get();

它将返回类别表/模型中的列id, name。您必须指定id

https://laravel.com/docs/5.7/eloquent-relationships#many-to-many

https://laravel.com/docs/5.7/eloquent-relationships#eager-loading