![](/img/trans.png)
[英]Active Record - CodeIgniter : multiple COUNT on 3 joined tables
[英]constructing json from multiple tables in codeigniter with active record or mysql
我有3張桌子:
其中每個創建者都會有一個由其“ 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.