2015-04-17 64 views
1

使用Laravel 5,我有一個由用戶,會話和消息組成的數據庫,由用戶和會話之間的稱爲「conversation_user」(並與BelongsToMany關係形成)的數據透視表組成。該模式如下:Laravel雄辯的查詢數據透視表

| USERS | CONVERSATION | MESSAGES  | CONVERSATION_USER | 
| id  | id   | id    | user_id   | 
| username | timestamps | conversation_id | conversation_id | 
| password |    | user_id   |     | 
|   |    | message   |     | 

所以基本上我想要使用conversation_user獲得所有與登錄用戶的conversation_ids,然後使用這些結果來獲得與該會話中的最後消息。

在SQL而言,這等同於:

SELECT messages.`message` FROM conversation_user INNER JOIN messages ON 
conversation_user.conversation_id=messages.conversation_id 
WHERE conversation_user.user_id=1 ORDER BY messages.id DESC 

但我無法弄清楚如何與雄辯實現這一目標!

回答

3

這應該工作:

$messages = Message::whereHas('conversation.users', function($q){ 
    $q->where('user_id', 1); 
})->get(); 
+0

就像一個魅力 –

+0

如果我介紹了另一個表混進去叫喬布斯的談話表的外鍵名爲JOB_ID,任何想法,我怎麼會使用多個WhereHas? –

+0

如果你指定關係,你可以鏈接另一個'whereHas'調用。像'Message :: whereHas('conversation.users',...) - > whereHas('conversation.job',...) - > get()' – lukasgeiter