2016-05-10 28 views
0

CodeIgniterのアクティブレコードにクエリ文を書き込むにはどうすればよいですか?入れ子になったsqlをCodeigniterに変換する方法アクティブレコード

ここでは、コードをmenu.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)( '親'、$行[ 'ID'])

2 )ここで( 'parent'、$ r ['id'])

3)ここで( 'parent'、$ r2 ['id'])

+1

デバッグヘルプ( "**なぜこのコードは動作しないのですか?**")には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) –

+0

スニペットはHTML/JS/Javascriptの値しか持っていないので、コードスニペットに変更しました。実際にはPHPであるため、コードをhtmlとしてマークするヒントも削除しました。 – mikek3332002

答えて

0

モデル関数にデータを渡していないため、このエラーが発生しています。機能するためにパス値なしのデータは使用できません。

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

関数(上記の例のコード)で値を渡すと、それぞれの関数で値を渡すことができます。

関連する問題