首页 > 解决方案 > 如何在 laravel 中联合和 groupby

问题描述

我想获取发送聊天的联系人 ID,或者我是否使用本机查询向他发送聊天,我可以获得结果,但是当我在 laravel 中实现时,我的本机查询很难

select * from `users` where `users`.`id` in (
    select `to` from messages where `from` = 2 group by `to`
    union
    select `from` from messages where `to` = 2 group by `from`
    )

我发现困难的是如何在 group by 或 group by 后联合使用相同的列号,我使用合并但结果是错误的,这是我在 laravel 中尝试过的

$to = Message::select('to')->where('from',auth()->id())->groupBy('to')->get();
$from = Message::select('from')->where('to',auth()->id())->groupBy('from')->get();

$tofrom = $to->merge($from);
dd($tofrom);

如果有任何机构可以提供帮助,请

标签: laravel

解决方案


联合在文档中进行了描述。为了满足您的特定要求,您可以执行以下操作:

$final = User::whereIn('id', function ($query) {
    $from = Message::select('from')->where('from',auth()->id())->groupBy('from');
    $query->from('messages')->where('to',auth()->id())->groupBy('to')->union($from);
})->get();

免责声明:我还没有实际测试过这个,但我认为它应该可以工作。


推荐阅读