因此,我在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"]
}
]
最好的办法是什么?谢谢大家的帮助!
3条答案
按热度按时间enyaitl31#
对不起,我弄错你的问题了。我的错。谢谢@rafael
编辑版本:
你可以用拉威尔的收集方法
$documentList
```$namelist = collect($documentList)->groupBy('documentCategoryName');
$namelist = {
category1: [
{
documentName: "d1",
documentCategoryName: "category1"
},
{
documentName: "D2",
documentCategoryName: "category1"
}
],
}
$res = array();
foreach ($namelist as $key => $value){
array_push($res[$key], $value['documentname']);
}
s4chpxco2#
如果使用的是laravel>=5.3,那么查询将返回一个集合
您可以混合使用groupby()、map()和pluck():
如果您使用的是laravel 5.4,您可以更进一步,通过更改以下内容来使用更高阶的消息:
收件人:
lkaoscv73#
请看一下laravel的文档
groupBy()
在收藏课上。自
get()
返回一个集合,您可以将此方法链到底。