所以,我在Laravel工作,我有以下API GET路由,它从我的数据库返回一个包含文档及其类别的查询:
Route::get('documents', function() {
return DB::table('documents')
->join('documents_categories','documents_categories.documentCategoryID','=','documents.documentCategoryID')
->select('documentName','documentCategoryName')
->get(); });
这将返回按类别排序的所有文档:
{documentName: "Certificación de Licencia", documentCategoryName: "Aeronáutica Civil"}
{documentName: "Horas de Vuelo", documentCategoryName: "Aeronáutica Civil"}
{documentName: "Antecedente Penal", documentCategoryName: "Antecedentes"}
{documentName: "Traslado de Animales y Plantas", documentCategoryName: "Certificado de Sanidad Animal o Vegetal"}
{documentName: "Calidad y Apto para el Consumo Humano", documentCategoryName: "Certificados Comerciales"}
{documentName: "Certificado de Libre Venta", documentCategoryName: "Certificados Comerciales"}
{documentName: "Certificado de Origen", documentCategoryName: "Certificados Comerciales"}
{documentName: "Patente", documentCategoryName: "Certificados Comerciales"}
{documentName: "Registro de Producto", documentCategoryName: "Certificados Comerciales"}
{documentName: "Signos Distintivos", documentCategoryName: "Certificados Comerciales"}
现在,我想要实现的是将文档类别作为 JSON 键返回,并在数组中提供相应的文档。像这样:
[
{
"Civiles":["document1","document2"],
"Antecedentes":["document1","document2"]
}
]
完成它的最佳方法是什么? 谢谢大家的帮助!
如果您使用的是 Laravel>=5.3,那么您的查询将返回一个集合
你可以混合使用 groupBy((、map(( 和 pluck((:
Route::get('documents', function () {
return DB::table('documents')
->join('documents_categories', 'documents_categories.documentCategoryID', '=', 'documents.documentCategoryID')
->select('documentName', 'documentCategoryName')
->get()
->groupBy('documentCategoryName')
->map(function ($item) {
return $item->pluck('documentName');
});
});
如果您使用的是Laravel 5.4,则可以更进一步,通过更改以下内容来使用高阶消息:
->map(function ($item) {
return $item->pluck('documentName');
});
自:
->map->pluck('documentName');
查看 Laravel 文档,了解集合类groupBy()
。
由于get()
返回集合,因此可以在末尾链接此方法。
Route::get('documents', function() {
return DB::table('documents')
->join('documents_categories','documents_categories.documentCategoryID','=','documents.documentCategoryID')
->select('documentName','documentCategoryName')
->get()
->groupBy('documentCategoryName');
});
对不起,我误会了你的问题。我的坏。谢谢@Rafael
编辑版本:
好吧,您可以在$documentList
上使用Laravel的收集方法
$namelist = collect($documentList)->groupBy('documentCategoryName');
它将返回类似这样的东西。不是 json 格式。它将采用数组格式。
$namelist = {
category1: [
{
documentName: "d1",
documentCategoryName: "category1"
},
{
documentName: "D2",
documentCategoryName: "category1"
}
],
}
之后,您可以遍历此数组
$res = array();
foreach ($namelist as $key => $value){
array_push($res[$key], $value['documentname']);
}
并返回$res
.这将是您想要的输出。
如果您正在寻找这样的东西,请告诉我。