2015-04-17 39 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