Laravel Eloquent:如何用Union合并同一张表的两列数据
用Laravel Eloquent Union合并两列为单列的实现方法
嘿,这个需求其实很好解决!因为Eloquent的union(或者unionAll)是用来合并两个查询结果集的,我们只需要把两列分别拆成两个独立的查询,再给它们统一列别名,就能合并成单列啦。
具体实现步骤
假设你的数据表对应的Eloquent模型是YourModel,列名分别是column1和column2,可以这么写:
// 先创建第一个查询:选取column1,并重命名为统一的别名 $column1Query = YourModel::select('column1 as combined_column'); // 再创建第二个查询:选取column2,同样用同一个别名,然后合并第一个查询 $combinedData = YourModel::select('column2 as combined_column') ->union($column1Query) // 如果需要保留重复值,改用 unionAll($column1Query) ->pluck('combined_column') // 提取单列数据 ->toArray(); // 转成数组,方便查看或使用
代码解释
- 统一列别名:
union要求两个查询的列数、列类型和列名一致,所以我们把两列都重命名为combined_column,这样合并时不会报错。 - Union vs UnionAll:默认的
union会自动去重,如果你的数据里有重复值且需要保留,就用unionAll。 - 提取单列:最后用
pluck('combined_column')可以直接取出合并后的单列数据,转成数组后就是你想要的[1,2,3,4,5,6]格式啦。
可选:排序结果
如果需要对合并后的结果排序,只需要在链式调用里加上orderBy:
$combinedData = YourModel::select('column2 as combined_column') ->union($column1Query) ->orderBy('combined_column', 'asc') // 按升序排列,desc是降序 ->pluck('combined_column') ->toArray();
内容的提问来源于stack exchange,提问作者clads clads
相关产品推荐
相关产品推荐

