如何在php中更改mysql查询返回的数据格式

oxcyiej7  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(245)

因此,我在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"]
    }
]

最好的办法是什么?谢谢大家的帮助!

enyaitl3

enyaitl31#

对不起,我弄错你的问题了。我的错。谢谢@rafael
编辑版本:
你可以用拉威尔的收集方法 $documentList ```
$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` . 这将是你想要的输出。
如果你想找这样的东西,就告诉警察。
s4chpxco

s4chpxco2#

如果使用的是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');
lkaoscv7

lkaoscv73#

请看一下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');
});

相关问题