2017-04-26 107 views
0

在視圖中調用模型的功能可以嗎?codeigniter - 在視圖中調用模型的功能

我需要用table-child來製作一張桌子。

就像這樣:

row1 
    row1.1 
    row1.2 

row2 
    row2.1 
    row2.2 

row3 
    row3.1 
    row3.2 

控制器:

$data['test'] = $this->model_test->get_parent_row()->result_array(); 
$this->load->view('test_view', $data); 

我用的多的foreach的意見;第一個foreach顯示每一個父行,以及子foreach顯示行子。但這意味着我必須調用查詢來獲取基於父行的行子。

有沒有建議嗎?

回答

0

爲了保持控制器中的邏輯,我建議創建兩個不同的視圖。一個帶有子行數據,另一個帶有父數據。祕訣是在調用視圖時將參數TRUE傳遞給變量,而不是將其輸出到瀏覽器中。在控制器中有這樣的東西:

$parent = $this->model_test->get_parent_row()->result_array(); 

$children = ''; // INITIATE STRING TO STORE ALL CHILD VIEWS... 

// LOOP THROUGH PARENTS... 
foreach($parent as $child){ 
    // CREATE YOUR QUERY TO GET CHILD ROW HERE... 
    // ADJUST TO WHATEVER YOUR MODEL NAME OR PARAMETERS ARE: 
    $child_row = $this->model->get_child_row($child)->result_array(); 

    // THE TRUE PARAMETER RETURNS DATA FROM THE VIEW INSTEAD OF OUTPUT TO THE BROWSER 
    $children .= $this->load->view('child_view', $child_row, TRUE);  
} 

$this->load->view('parent_view', array('test'=>$children)); 

希望你能理解邏輯。在文檔中找到關於視圖的更多信息(向下滾動到最後):https://www.codeigniter.com/user_guide/general/views.html

更容易的是創建一個模型,該模型一次返回所有數據,然後將數組傳遞給一個視圖,您可以遍歷所有父項和他們的孩子立即。

0

你可以在你的模型裏面做這個數組結構 嘗試下面的邏輯來維護父子邏輯,你可以直接將它傳遞給你的視圖。

型號:

function your_function_name() { 
//select parent category 

$parent_array = array(); 

$query1 = $this->db->get('parent-table'); 


foreach($query1->result() as $row1) { 

    $child_array = array(); 

    // query for children 

     $query2 = $this->db->get('chilr-table')->where(id, $row1['id']); 

    foreach($query2->result() as $row2) { 
     $child_array[] = array(
         'id' => $row2['id'], 
         'name'  => $row2['name'] 
        ); 
    } 

    $parent_array[] = array(
         'id' => $row1['filter_group_id'], 
         'name' => $row1['name'], 
         'children' => $child_array 
        ); 

} 

return $parent_array; 
} 

在控制器: 導入模型

$this->load->model('model_name'); 

通查看

$data['test'] = $this->model_name->your_function_name(); 
$this->load->view('test_view', $data); 

我希望它會幫助你

+0

謝謝,我已經t了控制它,它的工作。 – Ukasyah