php - 按正确顺序列出 2 个用户之间的对话

标签 php laravel vue.js eloquent

我想创建一个聊天系统,我可以在上面列出特定 2 个人之间的所有聊天

我有 2 个表 userschats

我的聊天表有 3 列 - user_idfriend_idchat

我的User.php模型文件是这样的

public function chats() {
    return $this->hasMany('App\Chat');
}

例如:

我想在不改变对话顺序的情况下列出用户1和3之间的所有聊天
我可以通过 $chats = Auth::user()->chats->where('friend_id', '=', $id); 来简单地做到这一点,但这只会给经过身份验证的 (这是用户 1 或 3) 用户聊天。但我想要他们两个之间的对话。
所以我找到了另一种方法来做到这一点

$first = Chat::all()->where('user_id', '=', Auth::user()->id)->where('friend_id', '=', $id);
$second = Chat::all()->where('user_id', '=', $id)->where('friend_id', '=', Auth::user()->id);
$chats = $first->merge($second);

但是这种方式存在一些问题。这不会以正确的顺序进行聊天。我认为不可能正确排序。

所以我的问题是如何轻松地按正确顺序列出两个人之间的对话?
如果您想了解有关我的问题的更多详细信息,可以直接询问。

最佳答案

您应该能够在一个带有参数分组的查询中执行此操作,而不是执行两个单独的查询然后合并它们。

Chat::where(function ($query) use ($id) {
    $query->where('user_id', '=', Auth::user()->id)
          ->where('friend_id', '=', $id);
})->orWhere(function ($query) use ($id) {
    $query->where('user_id', '=', $id)
          ->where('friend_id', '=', Auth::user()->id);
})->get();

可能也会以正确的顺序返回您的结果,只是因为没有指定任何排序标准,数据库通常会按照插入的顺序返回行。但是,如果不向您的聊天表添加排序依据(时间戳或自动增量 ID),则无法保证这一点。

关于php - 按正确顺序列出 2 个用户之间的对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892601/

相关文章:

javascript - vue/vuetify 中的 {on, attrs} 有何作用?

vue.js - VueJS : variable is undefined inside computed only

php - nginx X-Frame-Options 仍然具有相同的值

php - 如何使用 zend 框架读取 Controller 上的 application.ini

php - Laravel 迁移禁用外键检查的好方法

php - 使用 PHP ImageMagick 库将 pdf 文件的前 n 页转换为单个 png 图像文件

javascript - WebApp 基本问题

php - 提示/警告用户删除按钮并运行脚本进行删除

php - 如何将mysql行存储到私有(private)数组变量中?

php - laravel 4 重置密码 : sending multiple emails