You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 如何按adm_email字段分组查询获取每个管理员对应的项目列表

解决方案

你原来的写法问题出在SQL层面的GROUP BY只会返回每个分组的单条记录,无法拿到同一邮箱下的所有项目,用下面两种方案都可以实现需求:


方案1:使用Laravel集合分组(推荐,写法简单适配大多数场景)

// 第一步查询出所有关联的项目和对应邮箱数据
$list = Projet::join('filiales','projets.id_filiale','=','filiales.id_filiale')
    ->select('projets.nom_projet','filiales.adm_email')
    ->get();

// 第二步用集合的groupBy方法按邮箱分组,提取每个分组的项目名称
$result = $list->groupBy('adm_email')
    ->map(function ($item) {
        return $item->pluck('nom_projet')->all();
    })
    ->all();

得到的$result就是你要的adm_email => [nom_projet1, nom_projet2...]的结构。


方案2:SQL层面聚合(适合数据量较大的场景)

如果项目数据量很大,先全量查再分组性能低,可以用SQL的GROUP_CONCAT函数先聚合项目名称,再拆分:

$result = Projet::join('filiales','projets.id_filiale','=','filiales.id_filiale')
    ->selectRaw('filiales.adm_email, GROUP_CONCAT(projets.nom_projet SEPARATOR "|||") as project_names')
    ->groupBy('filiales.adm_email')
    ->get()
    ->mapWithKeys(function ($item) {
        return [$item->adm_email => explode('|||', $item->project_names)];
    })
    ->all();

这里用|||做分隔符是为了避免项目名本身包含逗号导致拆分错误,你可以根据实际业务调整分隔符。


内容的提问来源于stack exchange,提问作者saadia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:09:02