检索未读消息作为模型方法雄辩

Posted

技术标签:

【中文标题】检索未读消息作为模型方法雄辩【英文标题】:retrieve unread messages as model method eloquent 【发布时间】:2020-10-17 12:42:35 【问题描述】:

我有一个简单的消息系统,像这样的工作,

1 个用户可以拥有多个对话 1 个用户可以收到许多对话 1 个对话有很多消息

表结构是这样的,

采访

ID | 标题 | created_by (用户) | 收件人(用户)| created_at | 更新时间 |

消息

ID |内容 |对话ID |发送者 | read_at | created_at |更新时间

我想要实现的是计算(或收集)所有未读用户作为关系/模型函数,即

$user->unreadMessages();

这可能吗?我正在努力解决如何做到这一点,因为我不能只查询消息,我只需要用户参与但他们尚未发送的对话的消息。

希望有人能提供帮助。我完全糊涂了,也许数据库需要重新设计以帮助阅读回执?

【问题讨论】:

"所有未读用户" whaaat? 检查文档中的“hasManyThrough” 【参考方案1】:

如 cmets 中所述,使用 hasManyThrough 通过中间关系提供对远距离关系的访问。

如下定义关系:

用户模型

 /**
 * Get all of the UnReadMessages of the user.
 */
public function unreadMessages()

    return $this->hasManyThrough(
                  Message::class,
                  Conversation::class,
                  'created_by',
                  'conversation_id')
                  ->whereNull('read_at');

【讨论】:

以上是关于检索未读消息作为模型方法雄辩的主要内容,如果未能解决你的问题,请参考以下文章

根据ios中的未读消息更新应用图标的徽章计数

跟踪每个用户未读消息的最有效方法

mysql中未读消息的数据库设计?

Quickblox Android:未读消息总数请求

在更新之前评估查询集

Socket,长连接,消息推送,消息提醒,未读消息提醒,消息通知,未读消息通知