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

时间:2018-04-17 19:28:49

标签: json cakephp cakephp-3.0

大家好,我是蛋糕php的新手,并且正在努力使用Cake PHP代码的JSON响应格式

    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"
         }
     }
 ]
 }

由于

1 个答案:

答案 0 :(得分:1)

您不需要执行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']);
}