因此,我在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"]
}
]
完成它的最好方法是什么? 谢谢大家的帮助!
答案 0 :(得分:2)
如果您使用Laravel> = 5.3,则查询将返回collection
您可以混合使用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,则可以更进一步,并通过更改以下内容来使用Higher Order Messages:
->map(function ($item) {
return $item->pluck('documentName');
});
收件人:
->map->pluck('documentName');
答案 1 :(得分:0)
对不起,我弄错了你的问题。我的错。谢谢@Rafael
编辑版本:
好吧,您可以在$documentList
上使用Laravel的collect方法
$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
。这将是您想要的输出。
让我们知道您是否正在寻找这样的东西。
答案 2 :(得分:0)
在集合类上查看groupBy()
的Laravel文档。
由于get()
返回一个集合,因此您可以在最后链接此方法。
Route::get('documents', function() {
return DB::table('documents')
->join('documents_categories','documents_categories.documentCategoryID','=','documents.documentCategoryID')
->select('documentName','documentCategoryName')
->get()
->groupBy('documentCategoryName');
});