-1

我是 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 错误的建议都会很好!

4

1 回答 1

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(),因此每个控制器只需要一条线。

于 2013-03-25T00:34:56.343 回答