【发布时间】:2019-12-26 03:51:42
【问题描述】:
我在尝试使用模型关系获取每个对话的最后一条消息和未读消息的数量时遇到问题:
|id | user_id | recipient_to | message | read | created_at | updated_at |
+---+---------+--------------+-------------------+------+------------+------------+
| 1 | 1 | 2 | Hi | 1 | | |
| 2 | 2 | 1 | How are you? | 1 | | |
| 3 | 1 | 3 | Hi | 0 | | |
| 4 | 1 | 2 | Could you help me?| 0 | | |
我已经构建了检索特定用户的对话线程的查询,包括与收件人的关系:
模型:App\Models\Message.php
public function userTo()
{
return $this->belongsTo('App\Models\User', 'recipient_to', 'id');
}
控制器
$conversations = Message::where('user_id', 1)
->with([
'userTo' => function ($query) {
$query->select('id', 'name', 'last_name', 'avatar');
}
])
->distinct()
->get(['recipient_to']);
回复:
[
{
"recipient_to": 2,
"user_to": {
"id": 2,
"name": "Jessyca",
"last_name": "Skiles",
"avatar": "https://i.pravatar.cc/150?u=hayes.rachael@example.org"
}
},
{
"recipient_to": 3,
"user_to": {
"id": 3,
"name": "Rocio",
"last_name": "Rosenbaum",
"avatar": "https://i.pravatar.cc/150?u=yspencer@example.org"
}
}
]
如何建立返回最后一条消息和未读消息数的关系?
我已经看过这篇文章了,我觉得很有趣,虽然目的是研究 Laravel 的关系 Get latest message (row) per user in Laravel
21/08/2019 --- 进展
如果我在用户模型中创建两个关系,我会收到对话中每个用户发送的最后一条消息,有没有办法创建一个额外的关系并合并以返回最新的?
public function latestMessageTo()
{
return $this->hasOne('App\Models\Message', 'recipient_to')->orderBy('created_at', 'desc')->latest();
}
public function latestMessageFrom()
{
return $this->hasOne('App\Models\Message', 'user_id')->orderBy('created_at', 'desc')->latest();
}
【问题讨论】:
标签: php laravel eloquent-relationship