我在加载模型时得到此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的新手,需要一些帮助才能知道我的代码出错了。
答案 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>