使用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来实现这个目标!
答案 0 :(得分:3)
这应该有效:
$messages = Message::whereHas('conversation.users', function($q){
$q->where('user_id', 1);
})->get();