2017-04-21 73 views
2

我有以下表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'); 
    } 
} 

我想所有属于用户的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, 
    ... 
] 

我怎么能这样做?

回答

2

使用pluck()方法:

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

太棒了。我建议保留' - > select('book_id')',因为这是从数据库传输到服务器的较少数据。 –

+1

请解释downvote。 –

+0

不知道是谁做的或为什么 –

3

我建议在user.php的支点放在隐藏的阵列中,如:

protected $hidden = ['pivot']; 

这会从所有的JSON的返回删除支点。

+2

对于一个小应用程序可以,但如果您需要将透视数据包含在一个查询中怎么办?你需要重建所有其他查询来隐藏透视数据并测试其中的每一个? –

+0

我认为你是对的,也许最好的做法是使用变压器,不包括不需要的枢轴 –

+1

@HazemEmad谢谢你的回答,但请修正美元符号的位置。它应该在“隐藏”之前,而不是在“受保护”之前。 –