在视图中调用模型的功能是否可以?
我需要制作一张带有桌子的桌子。
就像这样:
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。
有任何建议吗?
答案 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);
我希望它能帮到你