2017-04-21 74 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謝謝你的回答,但請修正美元符號的位置。它應該在「隱藏」之前,而不是在「受保護」之前。 –