繁体   English   中英

codeigniter-在视图中调用模型的功能

[英]codeigniter - call model's function in view

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

我需要在里面放一个桌子孩子的桌子。

像这样:

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,以显示行子行。 但这意味着我必须调用查询以基于父行获取行子。

有什么建议吗?

为了将逻辑保留在控制器中,我建议创建两个不同的视图。 一种带有子行数据,另一种带有父数据。 秘诀是在调用视图时将参数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

更简单的方法是创建一个模型,该模型一次返回所有数据,然后将数组传递到一个视图,在该视图中,您可以一次遍历所有父母及其子女。

您可以在模型内完成此数组结构的操作。尝试以下逻辑以维护父子逻辑,您可以将其直接传递给视图。

在模型上:

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

希望对您有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM