如何将嵌套的sql转换为Codeigniter Active记录

问题描述:

如何在CodeIgniter活动记录中编写查询语句?如何将嵌套的sql转换为Codeigniter Active记录

这里是查看menu.php文件与PHP程序中的代码。 (此代码可以运行)

<?php 

    $m=1; 

    echo "<table> 
    <tr> 
     <td>No</td><td>Menu</td><td>Submenu 1</td><td>Submenu 2</td><td>Submenu 3</td> 
    </tr>"; 

     // main menu 
     $query1 = $this->db->query("select id,title,parent,order from tbl_menu where parent='0' order by order;"); 
     foreach($query1->result_array() as $r) { 

    echo "<tr> 
     <td>$m</td><td>$row[title]</td><td>-</td><td>-</td><td>-</td> 
    </tr>"; 

     $m++; 
     $s1=1; 

     // submenu 1 
     $query2 = $this->db->query("select * from tbl_menu where parent='$row[id]' order by order;"); 
     foreach($query2->result_array() as $r) { 

    echo "<tr> 
     <td></td><td >$s1</td><td>$r[title]</td><td>-</td><td>-</td> 
    </tr>"; 

      $s1++; 
      $s2=1; 

      // submenu 2 

      $query3 = $this->db->query("select * from tbl_menu where parent='$r[id]' order by order;"); 
      foreach($query3->result_array() as $r2) { 


    echo "<tr> 
     <td></td><td></td><td >$s2</td><td>$r2[title]</td><td>-</td> 
    </tr>"; 

       $s2++; 
       $s3=1; 
       // submenu 3 
       $query4 = $this->db->query("select * from tbl_menu where parent='$r2[id]' order by order;"); 
       foreach($query4->result_array() as $r3) { 

    echo "<tr> 
     <td></td><td></td><td></td><td>$s3</td><td>$r3[title]</td> 
    </tr>"; 
     $s3++; 

       } // submenu 3 
      } // submenu 2 
     } // submenu 1 
    } // main menu 

    echo"</table>"; 


    ?> 

我变成这样...(这是错误)

<?php 

    $m=1; 

    echo "<table> 
    <tr> 
     <td>No</td><td>Menu</td><td>Submenu 1</td><td>Submenu 2</td><td>Submenu 3</td> 
    </tr>"; 

     // main menu 
     foreach($query1 as $r) { 

    echo "<tr> 
     <td>$m</td><td>$row[title]</td><td>-</td><td>-</td><td>-</td> 
    </tr>"; 

     $m++; 
     $s1=1; 

     // submenu 1 
     foreach($query2 as $r) { 

    echo "<tr> 
     <td></td><td >$s1</td><td>$r[title]</td><td>-</td><td>-</td> 
    </tr>"; 

      $s1++; 
      $s2=1; 

      // submenu 2 

      foreach($query3 as $r2) { 


    echo "<tr> 
     <td></td><td></td><td >$s2</td><td>$r2[title]</td><td>-</td> 
    </tr>"; 

       $s2++; 
       $s3=1; 
       // submenu 3 
       foreach($query4 as $r3) { 

    echo "<tr> 
     <td></td><td></td><td></td><td>$s3</td><td>$r3[title]</td> 
    </tr>"; 
     $s3++; 

       } // submenu 3 
      } // submenu 2 
     } // submenu 1 
    } // main menu 

    echo"</table>"; 


    ?> 

这里是Menu_model.php文件型号代码。

<?php 


class Menu_model extends CI_Model { 

    public function menu_q1() { 
    $this->db->select('*')->from('tbl_menu')->where('parent','0')->order_by('order', 'ASC'); 
    $query1 = $this->db->get(); 
    return $query1->result_array(); 
    } 

    public function menu_q2() { 
    $this->db->select('*')->from('tbl_menu')->where('parent',$row['id'])->order_by('order', 'ASC'); 
    $query2 = $this->db->get(); 
    return $query2->result_array(); 
    } 

    public function menu_q3() { 
    $this->db->select('*')->from('tbl_menu')->where('parent',$r['id'])->order_by('order', 'ASC'); 
    $query3 = $this->db->get(); 
    return $query3->result_array(); 
    } 

    public function menu_q4() { 
    $this->db->select('*')->from('tbl_menu')->where('parent',$r2['id'])->order_by('order', 'ASC'); 
    $query4 = $this->db->get(); 
    return $query4->result_array(); 
    } 

} 

?> 

以下是在Menu_controller.php文件控制器的代码。

<?php 

Class Menu_controller extends CI_Controller { 

    function __construct(){ 
     parent::__construct(); 
     $this->load->model('menu_model'); //Load profil_model 
    } 

    public function profil() { 

     $query1 = $this->profil_model->menu_q1(); 
     $query2 = $this->profil_model->menu_q2(); 
     $query3 = $this->profil_model->menu_q3(); 
     $query4 = $this->profil_model->menu_q4(); 

    $this->load->view('profil', array('query1' => $query1,'query2' => $query2,'query3' => $query3,'query4' => $query4)); 


} 

?> 

这是表

 
    -------------------------------------------------------- 
    No | Menu  | Submenu 1 | Submenu 2 | Submenu 3 
    -------------------------------------------------------- 
    $m | $row[title] | -   | -   | - 
     |   $s1| $r[title] | -   | - 
     |    |  $s2| $r2[title] | - 
     |    |   |   $s3| $r3[title] 
    -------------------------------------------------------- 

但是,让错误在此声明:

1),其中( '父',$行[ '身份证'])

2 )('parent',$ r ['id'])

+1

寻求调试帮助的问题(“**为什么不是这个代码工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证示例](http://*.com/help/mcve)。 –

+0

片段只对HTML/JS/Javascript有价值,所以我将它们改为代码片段。我还删除了将代码标记为html的提示,因为它实际上是php。 – mikek3332002

发生该错误的原因是您没有将数据传递到模型函数中。您无法使用任何没有传递值的数据来运作。

public function menu_q2($row) { 
    $this->db->select('*')->from('tbl_menu')->where('parent',$row['id'])->order_by('order', 'ASC'); 
    $query2 = $this->db->get(); 
    return $query2->result_array(); 
    } 

    public function menu_q3($r) { 
    $this->db->select('*')->from('tbl_menu')->where('parent',$r['id'])->order_by('order', 'ASC'); 
    $query3 = $this->db->get(); 
    return $query3->result_array(); 
    } 

    public function menu_q4($r2) { 
    $this->db->select('*')->from('tbl_menu')->where('parent',$r2['id'])->order_by('order', 'ASC'); 
    $query4 = $this->db->get(); 
    return $query4->result_array(); 
    } 

如果你在函数中传递值(上面的例子代码),那么你可以在函数中使用它。