Laravel 5:查询多对多关系而不使用;“支点”;结果

Laravel 5:查询多对多关系而不使用;“支点”;结果,laravel,laravel-5,Laravel,Laravel 5,我有下列表格 使用者 身份证 书 身份证 最喜欢的书 身份证 用户id(FK) 图书编号(FK) 我有以下型号: class User { public function favouriteBooks() { return $this->belongsToMany(Book::class, 'favourite_books'); } } 我想获取属于某个用户的所有ID 我目前的做法是: $user->favouriteBook

我有下列表格

  • 使用者
    • 身份证
    • 身份证
  • 最喜欢的书
    • 身份证
    • 用户id(FK)
    • 图书编号(FK)
我有以下型号:

class User {
    public function favouriteBooks()
    {
        return $this->belongsToMany(Book::class, 'favourite_books');
    }
}
我想获取属于某个用户的所有ID

我目前的做法是:

$user->favouriteBooks()->select('book_id')->get();
然而,这样返回数据

[
   {
     "book_id": 23,
     "pivot": {
       "user_id": 57,
       "book_id": 23
     }
   },
   {
     "book_id": 41,
     "pivot": {
       "user_id": 57,
       "book_id": 41
     }
   },
   ...
]
我希望它返回如下数据:

[
   23,
   41,
   ...
]
我如何才能做到这一点?

使用
pluck()
方法:

$user->favouriteBooks()->pluck('book_id');

我建议将pivot放入user.php中的隐藏数组中:

protected $hidden = ['pivot'];
这将从所有返回的json中删除pivot。

或:

$user = User::where('id',1)->with('favourite_books')->first();
$fbs = [];
foreach($user->favourite_books as $book) {
    $fbs[] = $book['book_id'];
}
unset($user->favourite_books);
$user->favourite_books = $fbs;

return $user;

令人惊叹的。我建议保留
->select('book\u id')
,因为从数据库传输到服务器的数据较少,不知道是谁做的,为什么?它有什么作用?请在您的答案中添加详细信息。对于一个小型应用程序来说,这是可以的,但如果您需要在一个查询中包含透视数据,该怎么办?您需要重新生成所有其他查询以隐藏透视数据并测试其中的每一个?我认为您是对的,也许最好的做法是使用转换器,在不包含透视数据时不包含透视数据needed@HazemEmad谢谢你的回答,但请确定美元符号的位置。它应该在“隐藏”之前,而不是在“保护”之前。谢谢你的通知。它只在我把它添加到图书类时对我有效。我是呼叫用户->收藏书籍