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谢谢你的回答,但请确定美元符号的位置。它应该在“隐藏”之前,而不是在“保护”之前。谢谢你的通知。它只在我把它添加到图书类时对我有效。我是呼叫用户->收藏书籍