Laravel 5:在结果中没有"枢轴"的情况下查询多对多的关系

Yah*_*din 6 laravel laravel-5

我有以下表格

  • 用户
    • ID
  • 图书
    • ID
  • favourite_books
    • ID
    • user_id(FK)
    • book_id(FK)

我有以下型号:

class User {
    public function favouriteBooks()
    {
        return $this->belongsToMany(Book::class, 'favourite_books');
    }
}
Run Code Online (Sandbox Code Playgroud)

我想获得属于用户的所有ID.

我目前这样做的方式是这样的:

$user->favouriteBooks()->select('book_id')->get();
Run Code Online (Sandbox Code Playgroud)

然而,这会返回数据;

[
   {
     "book_id": 23,
     "pivot": {
       "user_id": 57,
       "book_id": 23
     }
   },
   {
     "book_id": 41,
     "pivot": {
       "user_id": 57,
       "book_id": 41
     }
   },
   ...
]
Run Code Online (Sandbox Code Playgroud)

我希望它像这样返回数据:

[
   23,
   41,
   ...
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Haz*_*mad 15

我建议将pivot放在隐藏数组中,如user.php中所示:

protected $hidden = ['pivot'];
Run Code Online (Sandbox Code Playgroud)

这将从所有返回的json中移除枢轴.

  • 这对于一个小应用程序来说没问题,但是如果你需要在一个查询中包含数据透视数据呢?您需要重建所有其他查询以隐藏透视数据并测试其中的每一个? (2认同)

Ale*_*nin 5

使用pluck()方法:

$user->favouriteBooks()->pluck('book_id');
Run Code Online (Sandbox Code Playgroud)