gpt4 book ai didi

php - 在 Laravel 中找到交点的最佳方法

转载 作者:行者123 更新时间:2023-12-03 16:49:08 25 4
gpt4 key购买 nike

我在 Laravel 应用程序中有用户和聊天模型。用户可以成为多个聊天的成员,因此我在聊天和用户之间建立了多对多关系 - belongsToMany用来。

假设我知道的用户 ID 很少,我想检索所有 常见聊天 (他们同时是成员的聊天,例如,群组聊天,其中 所有 具有给定 ID 的用户被分组)。这个查询应该如何使用 Laravel 构建?

最佳答案

最好的方法是进行连接:

Chat::join('chat_user', 'chat_id', 'chats.id')
->whereIn('chat_user.user_id',$listOfUserIds)
->selectRaw('chat_user.chat_id, COUNT(1) as users_count')
->groupBy('chat_user.chat_id')
->having('users_count','=', count($listOfUserIds));

这是最佳的,因为它只加入枢轴。

执行此操作的优雅方法是使用 whereHas使用“基数”参数,即找到这些用户参与的所有聊天,只要他们都参与。
Chat::whereHas('user', function ($q) {
return $q->whereIn('id', $listOfUserIds);
}, '=', count($listOfUserIds));

这仍然只执行一个查询,但加入了数据透视表和用户表。

关于php - 在 Laravel 中找到交点的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61438678/

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