Laravel Eloquent查询数据透视表

时间:2015-04-17 17:42:44

标签: php mysql laravel eloquent

使用Laravel 5,我有一个由用户,对话和消息组成的数据库,由用户和对话之间的数据透视表连接,称为" conversation_user" (并与BelongsToMany关系形成)。架构如下:

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

所以基本上我尝试使用conversation_user获取与登录用户相关的所有conversation_id,然后使用这些结果获取与该对话相关的最后一条消息。

在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

但是我无法弄清楚如何用Eloquent来实现这个目标!

1 个答案:

答案 0 :(得分:3)

这应该有效:

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