如何在codeigniter中正确调用模型?

时间:2016-11-04 10:10:35

标签: php codeigniter models

我在加载模型时得到此Notice

 A PHP Error was encountered

        Severity: Notice

        Message: Undefined property: Users::$select

        Filename: controllers/users.php

        Line Number: 11

这是我的Controller(users.php)

 <?php  
 class Users extends CI_Controller{  

 public function index(){  
     //load the database  
     $this->load->database();  
     //load the model  
     $this->load->model('users_model');  
     //load the method of model  
     $data['h']=$this->select->select();  
     //return the data in view  
     $this->load->view('users_view', $data);  
  }  
 }  
 ?> 

这是我的模型(users_model.php)

<?php  
 class Users_model extends CI_Model  
 {  
  function __construct()  
  {  
     // Call the Model constructor  
     parent::__construct();  
  }  
  //we will use the select function  
  public function select()  
  {  
     //data is retrive from this query  
     $query = $this->db->get('users');  
     return $query;  
  }  
 }  
 ?>  

这是我的View(users_view.php)

<table border="1">  
  <tbody>  
     <tr>  
        <td>Id</td>  
        <td>First Name</td>  
        <td>Last Name</td>  
        <td>E-mail ID</td>  
        <td>Password</td>  
        <td>Gender</td>  
        <td>Phone</td>  
        <td>Address</td>  
        <td>Is Admin</td>  
     </tr>  
     <?php  
     foreach ($h->result() as $row)  
     {  
        ?><tr>  
        <td><?php echo $row->id;?></td>  
        <td><?php echo $row->fname;?></td>  
        <td><?php echo $row->lname;?></td>  
        <td><?php echo $row->email;?></td>  
        <td><?php echo $row->password;?></td>  
        <td><?php echo $row->gender;?></td>  
        <td><?php echo $row->phone;?></td>  
        <td><?php echo $row->address;?></td>  
        <td><?php echo $row->admin;?></td>  
        </tr>  
     <?php }  
     ?>  
  </tbody>  

我是CodeIgniter的新手,需要一些帮助才能知道我的代码出错了。

3 个答案:

答案 0 :(得分:3)

您对模型方法的调用是错误的。 您应该使用model中要使用的方法拨打controller,如下所示:

$this->load->model('users_model');  
$data['h']=$this->users_model->select();  

编辑:加载模型时,您可以发送第二个参数作为模型的重命名。示例:

$this->load->model('users_model', 'select');  
$data['h']=$this->select->select();  

您应该查看docs以获取有关加载模型的更多信息

答案 1 :(得分:3)

不要在控制器中加载数据库,而是在模型中执行此操作。在MVC方式中,架构模型是数据层,因此查询和数据库工作应限于模型。

视图是应用程序的表示层,主要是&#34;用户看到&#34;。

控制器是应用程序的逻辑部分,它与视图和模型之间存在关联。所以所有逻辑工作,如加载视图,模型,数据验证,从数据库到表示层的数据处理,反之亦然,应保留在控制器中。

当谈到正确的加载模型时,上面的答案非常好,但是你也可能感兴趣的技巧很少。

<?php  
    Class Users extends CI_Controller {
     public function __CONSTRUCT () {
        parent::__CONSTRUCT();
        $this->load->model('user_model');
     }  

     public function index(){  
         //load the method of model  
         $data['h']=$this->user_model->select();  
         //return the data in view  
         $this->load->view('users_view', $data);  
      }  
     }  
     ?> 

您可以使用

等魔术方法
public function __CONSTRUCT() {
        parent::__CONSTRUCT();
        $this->load->model('user_model');
     }  

并在里面加载模型。这允许您在整个类中使用模型而不是在每个函数中加载模型。

此外,如果你想要多个模型,你可以在数组中完成。

  public function __CONSTRUCT() {
            parent::__CONSTRUCT();
            $this->load->model( array('user_model', 'model_2', 'model_3'));
         } 

答案 2 :(得分:-1)

将您的控制器更改为

<?php  
 class Users extends CI_Controller{
 public function index() {  
       //load the database  
       $this->load->database();  

       //load the model  
       $this->load->model('users_model');

       //load the method of model  
       $data['h']=$this->users_model->select_data();  


       //return the data in view  
       $this->load->view('users_view', $data);  
   }  
 }  
?> 

你的模特

<?php  
 class Users_model extends CI_Model  
 {  
  function __construct()  
   {  
    // Call the Model constructor  
     parent::__construct();  
   }  
//we will use the select function  
 public function select_data()  
 {  
 //data is retrive from this query  
 $query = $this->db->get('users');  
 return $query;  
   }  
   }  
?> 

您的观点

<table border="1">  
 <tbody>  
 <tr>  
    <td>Id</td>  
    <td>First Name</td>  
    <td>Last Name</td>  
    <td>E-mail ID</td>  
    <td>Password</td>  
    <td>Gender</td>  
    <td>Phone</td>  
    <td>Address</td>  
    <td>Is Admin</td>  
 </tr>  
 <?php  
 foreach ($h->result() as $row)  
 {  
    ?><tr>  
    <td><?php echo $row->id;?></td>  
    <td><?php echo $row->fname;?></td>  
    <td><?php echo $row->lname;?></td>  
    <td><?php echo $row->email;?></td>  
    <td><?php echo $row->password;?></td>  
    <td><?php echo $row->gender;?></td>  
    <td><?php echo $row->phone;?></td>  
    <td><?php echo $row->address;?></td>  
    <td><?php echo $row->admin;?></td>  
    </tr>  
 <?php } ?>  
 </tbody>