2016-08-16 58 views
0

我希望得到我的JSON像这样所有模块:如何返回所有模块的JSON?

[ 
{ 
    "id":"1", 
    "seccion":"Inventario", 
    "data": 
    [ 
    { 
    "id":"11", 
    "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/items.png", 
    "value":"Productos", 
    "seccion_id":"1", 
    "url":"http:\/\/localhost\/storeLTE\/inventario\/product" 
    }, 
    { 
     "id":"14", 
     "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/employees.png", 
     "value":"Provedores", 
     "seccion_id":"1", 
     "url":"http:\/\/localhost\/storeLTE\/provedor\/provedor" 
     } 
    ] 
    }, 
    { 
    "id":"2", 
    "seccion":"Compras", 
    "data": 
     [ 
     { 
     "id":"22", 
     "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png", 
     "value":"Compras", 
     "seccion_id":"2", 
     "url":"http:\/\/localhost\/storeLTE\/compras\/compras" 
     } 
     ] 
    } 
    ] 

但我的JSON正在返回此:

{ 
"seccions": 
{ 
    "0": 
    { 
    "id":"22", 
    "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png", 
    "value":"Compras", 
    "seccion_id":"2", 
    "url":"http:\/\/localhost\/storeLTE\/compras\/compras"},"index":1 
    } 
} 

控制器刚刚回我的最后一个模块,但我不知道为什么。我该如何修复它并更改我的控制器方法以返回所有模块?

控制器

public function getModules($module_id){ 
    if ($this->session->userdata('log')){ 
     $data = $this->session->userdata('log'); 
     $menu = array(); 
     $seccions = $this->module->get_rows(); 
     foreach ($seccions as $index => $seccion) { 
      $modules = $this->module->query("SELECT CONCAT('".$seccion['id']."',storelte_modulo.id) AS id,CONCAT('".base_url('assets/img/sidebar')."','/',storelte_modulo.icon) as icon, storelte_modulo.modulo AS value,storelte_modulo.seccion_id,CONCAT('".base_url()."',storelte_modulo.url) AS url FROM storelte_modulo INNER JOIN storelte_modulo_perfil ON storelte_modulo_perfil.modulo_id = storelte_modulo.id WHERE seccion_id = $seccion[id] AND storelte_modulo_perfil.perfiles_id = $data[id] AND storelte_modulo_perfil.STATUS = 1"); 
      //assuming you get 1 row only from the above query 
      if (!empty($modules)) { 
        $modules['index'] = $index; 
        $menu['seccions'] = $modules; 
      } 
     } 
     foreach ($seccions as $item) { 
      array_push($menu,$item); 
     } 
     $this->json($menu); 
     $this->load->view('modules_view',$menu); 
    } 
} 

型号

public function get_rows(){ 
    $this->db->select('id,seccion'); 
    $this->db->from('storelte_seccion'); 
    return $this->db->get()->result_array(); 
} 

public function query($query){ 
    return $this->db->query($query)->result_array(); 
} 

查看

<div class="row"> 
<h3 class="text-center">Welcome to storeLTE, click a module below to get started!</h3> 
<div class="home_module_list"> 
    <div class="module_item"> 
     <?php foreach ($seccions as $session) { ?> 
      <div class="module_item" title="<?= $session['value'];?>"> 
      <a href="<?= $session['url']; ?>"><img src="<?= $session['icon']; ?>"/></a> 
      <a href="<?= $session['url']; ?>"><?= $session['value']?></a> 
     </div> 
     <?php } ?> 
    </div> 
</div> 
</div> 

回答

0

您将要覆盖在你的结果第一“的foreach”有这样的说法:

$menu['seccions'] = $modules; 

在每一个周期,如果SQL查询成功,你只需通过电流值覆盖所有以前的数据。

后来对应于输出:

{ 
"seccions": 
{ 
    "0": { ... } 
} 
} 

控制器代码应该是这样的:

public function getModules($module_id){ 
    if ($data = $this->session->userdata('log')){ 
     $seccions = $this->module->get_rows(); 
     foreach ($seccions as $index => $seccion) { 
      // Consider using fetchAll() or similar method 
      $seccions[$index]['data'] = $this->module->query("SELECT CONCAT('".$seccion['id']."',storelte_modulo.id) AS id,CONCAT('".base_url('assets/img/sidebar')."','/',storelte_modulo.icon) as icon, storelte_modulo.modulo AS value,storelte_modulo.seccion_id,CONCAT('".base_url()."',storelte_modulo.url) AS url FROM storelte_modulo INNER JOIN storelte_modulo_perfil ON storelte_modulo_perfil.modulo_id = storelte_modulo.id WHERE seccion_id = $seccion[id] AND storelte_modulo_perfil.perfiles_id = $data[id] AND storelte_modulo_perfil.STATUS = 1"); 
     } 
     $this->json($seccions); 
     $this->load->view('modules_view', $seccions); 
    } 
} 

就考虑使用使用fetchall()或类似的方法后$这个 - >模块 - > query()一次获取所有数据。

+0

我该怎么办?你能给我一个例子,我怎样才能得到与所有模块的JSON? – azdejo

+0

这样做:$ menu ['seccions'] [] = $ modules; – Drkdra

+0

我该怎么做或访问我的观点? – azdejo