簡體   English   中英

如何將嵌套的SQL轉換為Codeigniter Active Record

[英]How to convert nested sql into Codeigniter Active record

如何在CodeIgniter活動記錄中編寫查詢語句?

這是帶有php過程的menu.php文件中的View代碼。 (此代碼可以運行)

    <?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)where('parent',$ row ['id'])

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

3)where('parent',$ r2 ['id'])

發生該錯誤是因為您沒有將數據傳遞給模型函數。 如果沒有傳遞值,則無法使用任何數據。

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();
    }

如果在函數中傳遞值(上面的示例代碼),則可以在函數中分別使用該值。

暫無
暫無

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

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