【问题标题】:How to pass result from Model to Controller in CodeIgniter?如何将结果从模型传递到 CodeIgniter 中的控制器?
【发布时间】:2017-12-03 11:55:54
【问题描述】:

我想从数据库中获取数据并使用 CodeIgniter 将其显示在网页上。我对我的控制器、模型和视图进行了如下编码。

控制器;

//HomeController

<?php

class HomeController extends CI_Controller
{
    public function index()
    {
        $this->load->model('HomeModel');
        $data['records'] = $this->HomeModel->getData();
        $this->load->view('HomeView',$data);

    }
}
?>

型号;

//HomeModel
<?php

class HomeModel extends CI_Model
{
    public function getData()
    {

          $query = $this->db->query('SELECT * FROM data');
          return $query->unbuffered_row('object');

    }
}
?>

查看;

//HomeView
<?php

echo "Recoeds from database<br>";

while($records)
{
    echo $records->name." ".$records->age."</br>";
}

?>

但是这段代码不会在屏幕上打印任何东西。(echo "Records from database&lt;br&gt;";)

所以我尝试了 CodeIgniter 文档中给出的以下代码,并在模型本身中回显结果,而不是将其返回给控制器,然后返回给视图。它工作正常。

//HomeModel
<?php
        class HomeModel extends CI_Model
        {
            public function getData()
            {
                $query = $this->db->query('SELECT * FROM data');
                while ($row = $query->unbuffered_row())
                {
                     echo $row->name;
                     echo $row->age;
                }
             }
        }
?>

我的问题是我们如何将unbuffered_row() 方法的结果返回到控制器中,然后按照 MVC 架构返回到视图中?我们可以通过在模型本身上回显结果来获得输出,但这违背了 MVC 架构的目的。

【问题讨论】:

  • CodeIgniter 与 MVC 架构无关。
  • 你也可以在模型中使用 $query->result_array() 。返回控制器。在那里您可以轻松访问数据。
  • 如果不是echo "Records from database&lt;br&gt;";,请检查您的 HomeView.php 文件是否在 application/views 文件夹中。另外,如果您将 while( 从模型移动到控制器并在那里循环 $data['records'] 会发生什么?

标签: php codeigniter


【解决方案1】:

您应该使用return $query-&gt;result();,然后在视图或控制器中获取正确的对象(这取决于您)。

【讨论】:

    【解决方案2】:

    试试这个

    控制器

    <?php
    
    class HomeController extends CI_Controller
    {
        public function index()
        {
            $this->load->model('HomeModel');
            $data['records'] = $this->HomeModel->getData();
            $this->load->view('HomeView',$data);
    
        }
    }
    ?>
    

    型号

    <?php
    
    class HomeModel extends CI_Model
    {
        public function getData()
        {
    
              $data = $this->db->query('SELECT * FROM data');
              return array('count'=>$data->num_rows(), 'data'=>$data->result(),'first'=>$data->row());
    
        }
    }
    ?>
    

    查看

    <?php
    
    echo "Recoeds from database<br>";
    
    foreach($record['data'] as $row)
    {
        echo $row->name." ".$row->age;
    }
    
    ?>
    

    【讨论】:

      【解决方案3】:

      我在本地模拟了你的代码。你的错误在这里。$records 是对象。而你的 while 循环没有退出循环的条件

      <pre>
          <?php
          var_dump($records);
          echo "Recoeds from database<br>";
          foreach($records as $value) {
      
              echo $value->name."<br>";
      
              echo $value->age."<br>";
      
          }
          ?>
          </pre>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多