簡體   English   中英

從帶有活動記錄或mysql的codeigniter中的多個表構造json

[英]constructing json from multiple tables in codeigniter with active record or mysql

我有3張桌子:

  • 創作者
  • 專案
  • project_galleries

其中每個創建者都會有一個由其“ creator_id”標識為創建者表中“ id”的項目列表,每個項目(如果類型為“ gallery”)將具有由其“ project_id”標識的project_galleries列表項目表中的“ id”。

我想輸出一個像這樣的json文件:

{
  "creators" : [
    name: "creator1",
    projects: [
      { 
        name: "project1",
        type: "video" //no need to get project gallery here
      },
      {
        name: "project2",
        type: "gallery",
        gallery_images: [
          {
             image: "01.jpg",
             caption: "01 caption"
          }
        ]
      }
    ]
  ]
}

我可以用這個得到我需要的東西:

$this->db->select('*');
$this->db->from('1985_creators');
$this->db->join('1985_projects','1985_projects.creator_id = 1985_creators.id');
$this->db->join('1985_project_galleries','1985_project_galleries.project_id = 1985_projects.id','left');
$query = $this->db->get();
return $query->result_array();

而我的控制器只是這樣做:

$data['json'] = $this->creators_model->get_all_creator_data();
$this->load->view('data/json_data', $data);

具有這樣的觀點:

<?php
header('Content-type: application/json');

if(isset($json)) {
    echo json_encode($json);
}
else {
    echo json_encode(array('error' => true));
}

但是,我不需要json的“分組”,而只是得到所有項目或畫廊的列表。 我將如何實現上述json結構? 我在文檔中讀到了有關可能適用的已編譯選擇的內容,但是我不確定如何使用它。 還是我的控制器需要進行某種循環?

我能找到的最簡單的方法是:

public function get_all_creator_data(){
    $creators = $this->creators_model->get_creators_content();
    foreach ($creators as $h=>$creator){
        $creators[$h]['projects'] = $this->creators_model->get_projects_data($creator['id']);
        foreach($creators[$h]['projects'] as $i=>$project){
            if ($project['type'] == "gallery"){
                $creators[$h]['projects'][$i]['gallery'] = $this->creators_model->get_gallery_data($project['id']);
            }
        }
    }

    $data['json'] = $creators;
    $this->load->view('data/json_data', $data);

}

//MODEL

public function get_creators_content(){
    $query = $this->db->get_where('1985_creators',array('active' => 1));
    return $query->result_array();
}

public function get_projects_data($creator_id){
    $query = $this->db->get_where('1985_projects',array('creator_id' => $creator_id ));
    return $query->result_array();
}

public function get_gallery_data($project_id){
    $query = $this->db->get_where('1985_project_galleries',array('project_id' => $project_id ));
    return $query->result_array();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM