我是codeigniter的新手,我正在试图弄清楚如何使用模型,我之前使用过MVP框架,但它有点不同。我有用户控制器,初始化模型(我认为我做对了),然后模型有一个函数,通过电子邮件获取一行。
控制器看起来像:
class Users extends CI_Controller{
public function login(){
$this->load->model('users_model');
$this->users_model->login('slavigne@uark.edu', 'abcdefg');
$this->load->view('templates/header');
$this->load->view('users/login');
$this->load->view('templates/footer');
}
}
,模型如下:
class users_model extends CI_Model{
public function users_model(){
parent::__construct();
}
public function login($email, $password){
$query = $this->db->get_where('users', array('email' => $email));
return $query->result();
}
}
我遇到的问题是:
Call to a member function get_where() on a non-object
我理解这意味着db不是一个对象,而是我为模型看到的所有代码,说这应该有效。任何帮助或建议都会很棒!对codeigniter的新手错误的任何建议都会很好!
答案 0 :(得分:2)
您似乎错过了$this->load->database();
class users_model extends CI_Model{
public function users_model(){
parent::__construct();
}
public function login($email, $password){
$this->load->database();
$query = $this->db->get_where('users', array('email' => $email));
return $query->result();
}
}
您还可以在application/config/autoload.php
文件中自动加载数据库库。
$autoload['libraries'] = array('database');
如果这样做,您不需要每次都手动加载它,但这也意味着它会在没有进行数据库调用的页面上加载。可能更关心优化器以节省带宽。
此外,如果您使用多个数据库连接,则仍应使用$this->load->database();
tho。有关详细信息,请参阅此链接:http://ellislab.com/codeigniter/user-guide/database/connecting.html
$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);
而不是使用..
$this->db->query();
$this->db->result();
..您将使用:
$DB1->query();
$DB1->result();
$DB2->query();
$DB2->result();
您仍然可以将负载添加到__construct()
,因此每个控制器只需要一行。