mysql - 如何以有效的方式合并来自多个表的结果 Laravel
问题描述
我必须合并 Laravel 中多个表的结果。目前我正在使用以下方式:
public function getMachines(Request $request) {
$vendor_id = Auth::id();
$ml_8_machine=ML8Machine::where('vendor_id','=',$vendor_id)->get();
$ml_16_machine=ML16Machine::where('vendor_id','=',$vendor_id)->get();
$ml_32_machine=ML32Machine::where('vendor_id','=',$vendor_id)->get();
$ml_64_machine=ML64Machine::where('vendor_id','=',$vendor_id)->get();
$ml_96_machine=ML96Machine::where('vendor_id','=',$vendor_id)->get();
$ml_128_machine=ML128Machine::where('vendor_id','=',$vendor_id)->get();
$machines = collect($ml_8_machine)
->merge($ml_16_machine)
->merge($ml_32_machine)
->merge($ml_64_machine)
->merge($ml_96_machine)
->merge($ml_128_machine);
return view('vendor.machines', compact('machines'));
}
我正在寻找一种有效的方法来在一个集合中进行查询和合并结果。
解决方案
如果你的列是相同的,你可以unionAll
用来合并记录。这将降低 IO 成本:
public function getMachines(Request $request) {
$vendor_id = Auth::id();
$ml_8_machine=ML8Machine::where('vendor_id','=',$vendor_id)->select('column1', 'column2'...);
$ml_16_machine=ML16Machine::where('vendor_id','=',$vendor_id)->select('column1', 'column2'...);
$ml_32_machine=ML32Machine::where('vendor_id','=',$vendor_id)->select('column1', 'column2'...);
$ml_64_machine=ML64Machine::where('vendor_id','=',$vendor_id)->select('column1', 'column2'...);
$ml_96_machine=ML96Machine::where('vendor_id','=',$vendor_id)->select('column1', 'column2'...);
$ml_128_machine=ML128Machine::where('vendor_id','=',$vendor_id)->select('column1', 'column2'...);
$machines = $ml_8_machine->unionAll($ml_16_machine)
->unionAll($ml_32_machine)
->unionAll($ml_64_machine)
->unionAll($ml_96_machine)
->unionAll($ml_128_machine)
->get();
return view('vendor.machines', compact('machines'));
}
请记住,您需要保持每列与其他列的顺序相同。
您也可以添加paginate()
此查询:
$machines = $ml_8_machine->unionAll($ml_16_machine)
->unionAll($ml_32_machine)
->unionAll($ml_64_machine)
->unionAll($ml_96_machine)
->unionAll($ml_128_machine)
->paginate(10);
推荐阅读
- docker - 使用主机网络启动 Docker 容器,同时保持 SSH 进入容器的能力?
- python - 如何使用 cx freeze 使用 setup.py 构建 msi 扩展
- python - 在 Python 中的字典中查找两个值之间的路径
- neo4j - 在 Cypher Neo4j 中找到正确的路径
- mysql - Sql 查询为每个匹配项选择一个结果
- join - 加入第二高值 (Impala)
- apache-ranger - Ranger 用户同步未实时同步用户
- java - 这个私有Textview和没有私有代码有什么区别?
- pseudocode - 伪代码结构建议和技术
- sql - 如何从 sql 列打印唯一数据?