【发布时间】:2018-04-04 04:37:53
【问题描述】:
我想创建一个聊天系统,我可以在上面列出特定 2 个人之间的所有聊天
我有两张桌子users 和chats
我的聊天表有 3 列 - user_id、friend_id 和 chat
我的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);
但是这种方式有一些问题。这不会以正确的顺序进行聊天。我认为不可能正确订购。
所以我的问题是如何以正确的顺序轻松列出两个人之间的对话?
如果您想了解有关我的问题的更多详细信息,可以询问。
【问题讨论】:
-
您的表中没有排序机制。在默认情况下,关系数据中的顺序不能保证,因为它应该无关紧要。如果您希望顺序很重要,那么您需要添加一列来指示顺序(例如日期时间?)。
-
@apokryfos 我理解你。但是有没有其他方法可以通过使用 laravel eloquent 或其他比包更简单的方法来做到这一点?
标签: php laravel vue.js eloquent