【问题标题】:codeigniter - call model's function in viewcodeigniter - 在视图中调用模型函数
【发布时间】:2017-04-26 00:38:30
【问题描述】:

可以在视图中调用模型的函数吗?

我需要制作一张里面有 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);

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

有什么建议吗?

【问题讨论】:

    标签: php mysql database codeigniter


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你可以在你的模型中做这个数组结构 尝试以下逻辑来维护父子逻辑,您可以直接将其传递给您的视图。

      在模型上:

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

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2014-03-06
        • 1970-01-01
        • 2013-04-26
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        相关资源
        最近更新 更多