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

如何从Doctrine获取按ID分组的非空origin多维数组?

解决方案

两种方式都能实现你的需求,下面分别说明:

一、直接通过数据库查询生成(以MySQL为例)

如果你的数据库支持JSON聚合函数(比如MySQL 5.7+、PostgreSQL等),可以直接用查询语句生成结构化结果,再转成数组即可:

MySQL查询语句

SELECT 
    JSON_ARRAYAGG(
        JSON_OBJECT('id', id, 'origin', origin)
    ) AS grouped_data
FROM 
    your_table_name
WHERE 
    origin IS NOT NULL AND origin != ''
GROUP BY 
    id;

这条语句会先过滤掉origin为空的记录,再按id分组,把每组的记录转为JSON对象后聚合为JSON数组。拿到结果后,在PHP里用json_decode()就能转成你要的多维数组。

PostgreSQL查询语句

如果用PostgreSQL,语法类似:

SELECT 
    json_agg(json_build_object('id', id, 'origin', origin)) AS grouped_data
FROM 
    your_table_name
WHERE 
    origin IS NOT NULL AND origin != ''
GROUP BY 
    id;

二、用PHP处理查询结果

要是数据库不支持JSON函数,或者你更习惯在代码层处理,也可以先查出数据再分组:

1. 查询符合条件的记录

// 假设已通过PDO建立数据库连接
$stmt = $pdo->query("SELECT id, origin FROM your_table_name WHERE origin IS NOT NULL AND origin != '' ORDER BY id");
$records = $stmt->fetchAll(PDO::FETCH_ASSOC);

2. 手动分组生成目标数组

$groupedData = [];
foreach ($records as $item) {
    $id = $item['id'];
    if (!isset($groupedData[$id])) {
        $groupedData[$id] = [];
    }
    $groupedData[$id][] = $item;
}
// 去掉键名,转为纯多维数组
$result = array_values($groupedData);

$result就是你需要的格式。

总结

  • 数据库查询方式更高效,数据量大时能减少PHP的内存消耗和处理压力
  • PHP处理方式兼容性更好,适合老版本数据库,后续修改逻辑也更灵活

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:01:11