在 CakePHP 中使用两个表在 Json 中获取格式化响应

Get formatted response in Json using two tables with CakePHP

大家好,我是 cake php 的新手,正在努力格式化 JSON 响应 Cake PHP 代码是

    public function getdata() {
    $responce = array();
    $conn = ConnectionManager::get('default');
    $stmt = $conn->execute('select * from mst_categories a inner join mst_subcategories b on a.category_id=b.category_id');
    $turnos = $stmt->fetchAll('assoc');
    $responce['status'] = 1;
    $responce['message'] = 'Category Data';
    $responce['data'] = $turnos;
    $this->set(compact('responce'));
    $this->set('_serialize', ['responce']);
}

结果我得到 JSON 响应

{
"responce": {
    "status": 1,
    "message": "Category Data",
    "data": [
        {
            "category_id": "2",
            "category_name": "testing",
            "category_avtar": "C:\xampp\htdocs\update\webroot\img\cat_images\5311-3.jpg",
            "subcategory_id": "1",
            "subcategory_name": "New Subcategory",
            "subcategory_avtar": "C:\xampp\htdocs\update\webroot\img\subcat_images\8580-2820-3.jpg"
        },
        {
            "category_id": "2",
            "category_name": "testing",
            "category_avtar": "C:\xampp\htdocs\update\webroot\img\cat_images\5311-3.jpg",
            "subcategory_id": "2",
            "subcategory_name": "Testing",
            "subcategory_avtar": "C:\xampp\htdocs\update\webroot\img\subcat_images\1232-5311-3.jpg"
        }
    ]
  }
  }

虽然我想要 JSON 描述的输出

[
 {
  "categoryId": 11,
   "categoryName": "cloths",
   "subCategoryData": [
    {
   "subCategoryName": "jeans",
   "subCategoryId": 0
    },
   {
     "subCategoryName": "shirt",
     "subCategoryId": 1
   }
 ]
},
{
  "categoryId": 12,
  "categoryName": "electronics",
   "subCategoryData": [
    {
    "subCategoryName": "TV",
   "subCategoryId": 2
   },
  {
   "subCategoryName": "fridge",
   "subCategoryId": 3
   }
 ]
 }
]

我不知道如何才能获得这种类型的响应,请帮助我解决这个问题 打电话时

     $this->loadModel('MstCategories');
     $data= $this->MstSubcategories->find()->contain(['MstCategories']);
     $this->set(compact('data'));
     $this->set('_serialize', ['data']); 

我收到这样的回复

  {
    "data": [
        {
        "subcategory_id": 1,
        "subcategory_name": "New Subcategory",
        "subcategory_avtar": "C:\xampp\htdocs\update\webroot\\img\subcat_images\8580-2820-3.jpg",
        "category_id": 2,
        "mst_category": {
            "category_id": 2,
            "category_name": "testing",
            "category_avtar": 
 "C:\xampp\htdocs\niattaupdate\webroot\\img\cat_images\5311-3.jpg"
          }
      },
      {
          "subcategory_id": 2,
          "subcategory_name": "Testing",
          "subcategory_avtar": "C:\xampp\htdocs\niattaupdate\webroot\\img\subcat_images\1232-5311-3.jpg",
         "category_id": 2,
        "mst_category": {
            "category_id": 2,
            "category_name": "testing",
            "category_avtar": "C:\xampp\htdocs\niattaupdate\webroot\\img\cat_images\5311-3.jpg"
         }
     }
 ]
 }

谢谢

您不需要执行SQL命令。如果你已经烘焙过模型,你可以试试下面的代码

public function getdata()
{
    // if in controller other than MstCategoriesController
    $this->loadModel('MstCategories');

    $data = $this->MstCategories->find()
        ->contain([
            'MstSubcategories'
        ]);

    $this->set(compact('data'));
    $this->set('_serialize', ['data']);
}