首页 > 解决方案 > 如何在 PHP 中更改从 MySQL 查询返回的数据格式

问题描述

所以,我在 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"]
    }
]

完成它的最佳方法是什么?谢谢大家的帮助!

标签: phpmysqljsonlaravel

解决方案


如果您使用 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');

推荐阅读