首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用另一表列对Laravel雄辩的结果进行排序

如何用另一表列对Laravel雄辩的结果进行排序
EN

Stack Overflow用户
提问于 2020-12-31 19:58:58
回答 2查看 188关注 0票数 0

我有一个非常简单的聊天应用程序,其中有3个表用户,chat_rooms和聊天室表,以解决每个用户的消息。

我想在我的视图中显示聊天室,但我希望它们按messages created_at排序,以便拥有最新消息的聊天室位于顶部。

我使用的查询是

代码语言:javascript
复制
ChatRoom::with('user')
            ->join('chats','chat_rooms.room_id','chats.room_id')
            ->select('chat_rooms.*','chats.created_at as c','chats.message')
            ->orderBy('c','DECS')
            ->paginate(5);

这很好,但是返回了我在查询中尝试使用groupBy('room_id')的所有聊天,但是它停止了工作。

我可以使用集合方法来修复这个问题,但是我不能使用分页,而且在这种情况下我真的不想使用集合方法。

注意到im使用Laravel5.4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-31 22:20:48

您雄辩的分页功能在ChatRoom表上运行,而不是在消息上运行。因此,您可以尝试另一种方式来加载您的信息在聊天室。

如果您有大量的聊天室,并且希望同时对聊天室和它们的消息进行分页,您可以对聊天室进行分页(不加入消息),并对每个聊天室消息运行雄辩的功能,separately.

  • you也可以对视图中的消息使用延迟加载,但您必须控制消息分页

向聊天室展示新信息:

拉力维尔<6

代码语言:javascript
复制
ChatRoom::select(['chat_rooms.*', 'chats.created_at as c'])
            ->join(DB::raw("(SELECT chats.room_id, max(chats.created_at) as created_at
                FROM chats
                GROUP BY room_id
                ORDER BY created_at DESC
                ) as chats"), function ($join) {
                $join->on("chat_rooms.id", "=", "chats.room_id");
            })
            ->orderBy('c', 'DECS')
            ->paginate(5);

Laravel >=6

代码语言:javascript
复制
$chatQuery = Chat::selectRaw("chats.room_id, max(chats.created_at) as created_at")
            ->groupBy("chats.room_id")
            ->orderBy("created_at", "desc");

ChatRoom::select(['chat_rooms.*', 'chats.created_at as c'])
  ->joinSub($chatQuery, 'chats', function ($join) {
       $join->on('chat_rooms.id', '=', 'chats.room_id');
  })
  ->orderBy('c','DECS')
  ->paginate(5);
票数 0
EN

Stack Overflow用户

发布于 2020-12-31 20:38:53

如果只想在第一个orderBy之后按列排序,只需添加另一个orderBy即可。如果在该查询中使用groupBy,则会丢失大部分消息。

代码语言:javascript
复制
->orderByDesc('c')
->orderBy('room_id')
->paginate(5);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65525117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档