codeigniter - 在视图中调用模型的函数

时间:2017-04-26 00:38:31

标签: php mysql database codeigniter

在视图中调用模型的功能是否可以?

我需要制作一张带有桌子的桌子。

就像这样:

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

我在视图中使用multi-foreach;第一个foreach显示每个父行,而sub-foreach显示row-child。但这意味着我必须调用一个查询来获取基于父行的row-child。

有任何建议吗?

2 个答案:

答案 0 :(得分: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

更容易创建一个一次返回所有数据的模型,然后将数组传递到一个视图,您可以在其中循环遍历所有父项及其子项。

答案 1 :(得分: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);

我希望它能帮到你