gpt4 book ai didi

mysql - 查询用户聊天中未读消息

转载 作者:行者123 更新时间:2023-11-29 15:31:17 25 4
gpt4 key购买 nike

我正在尝试构建一个越来越难的查询...我正在 Laravel 中开发一个聊天应用程序,结构简单:

  • 聊天有很多消息。
  • 每条消息都属于一个用户。
  • 用户和消息之间的 n:m 用于保存已读消息。

所以

Chat.php

public function messages() {
return $this->hasMany(Message::class)
}

Message.php

public function user() {
return $this->belongsTo(User::class);
}

public function reads() {
return $this->belongsToMany(User::class, 'reads');
}

User.php

public function messages() {
return $this->hasMany(Message::class);
}

public function reads() {
return $this->belongsToMany(Message::class, 'reads');
}

好吧,现在我想要下一个查询

Give me all Chats that has Messages unread by me (logged user)

这意味着类似这样的事情:

Chat::whereDoesntHave('messages.reads', function (Builder $q) {
return $q->where('user_id', auth()->id());
});

但这不起作用,因为如果聊天有我读过的一条消息,它就会被忽略:(

也许我可以通过仅将范围限定到聊天的最后消息来实现此目的?或者也许我可以进行这样的操作:

  • 统计所有聊天消息
  • 统计我阅读的所有聊天消息
  • 做个减法,如果不为0,考虑这个Chat :D

但我不知道如何用 Eloquent 进行该“操作”。

请帮忙。谢谢!

最佳答案

首先提取您阅读的所有聊天记录的 ID。

$pluckedId=Chat::has('messages.reads', function (Builder $q) {
return $q->where('user_id', auth()->id());
})->pluck('id');

然后应用

Chat::whereNotIn('id', $pluckedId )->get();

关于mysql - 查询用户聊天中未读消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58707460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com