CodeIgniter模型不起作用

时间:2011-10-13 10:56:40

标签: php mysql codeigniter

我需要从数据库中读取一些数据 我的控制器是

class Pro_ajax extends CI_Controller{
    public function _construct() {
        parent::_construct();
        $this->load->model('ajax_model');
    }
    public function _remap($method,$param = array())
    {
        if ($method == 'user_search')
        {
            $this->user_search($param[0]);
        }
    }
    private function user_search($text = '')
    {
        $result = $this->ajax_model->ajax_user_search($text);
        $count = count($result);
        $data = array();
        for ($i = 0;$i < $count AND $i < 5;$i++)
        {
            $data[$i][0] = $result->id;
            $data[$i][1] = $result->firstname.' '.$result->lastname;
        }
        echo (json_encode($data));
    }
}
我的模型是:

class Ajax_model extends CI_Model{
    public function __construct() {
        parent::__construct();
    }
    public function ajax_user_search($text = '')
    {
       $this->db->flush_cache();
       $this->db->limit(5);
       $this->db->or_like('firstname',$text);
       $this->db->or_like('lastname',$text);
       $this->db->or_like('alias',$text);
       $this->db->or_like('username',$text);

       $query = $this->db->get('user_store_table');
       var_dump($this->db->last_query());
       return $query->result();   
    }   
}

但它不起作用并回应:


A PHP Error was encountered

Severity: Notice

Message: Undefined property: Pro_ajax::$db

Filename: core/Model.php

Line Number: 50

问题出在哪里,我应该如何解决? 特别感谢您的关注

2 个答案:

答案 0 :(得分:7)

我100%确定您没有在自动加载中添加数据库。

请转到您的配置文件夹,然后打开autoload.php并搜索有的行 $自动加载[ '库']。

添加:

$autoload['libraries'] = array('database');

或者你可以这样做:

class Ajax_model extends CI_Model{
        public function __construct() {
            parent::__construct();
            $this->load->database();
        }

    }

希望这有帮助。

答案 1 :(得分:3)

看起来CI正在将$ this解释为控制器的实例而不是数据库对象...正如@AlphaMale巧妙地指出的那样,你有没有加载它?

   class Ajax_model extends CI_Model{
        public function __construct() {
            parent::__construct();
            $this->load->database();   //No, database doesn't autoload by default
           //this is something which I strongly suggest to do in the config/autoload.php file..you're going to use it a lot in Models ;)
        }
        //..
    }

此外,在控制器中自动加载模型可能被视为“不良做法”,因为即时加载(即使几乎可以忽略不计的数量)性能也会增加。 所以,我建议你把模块装到你需要的地方,即

 private function user_search($text = '')
 {
   $this->load->model('ajax_model');
 }

如果由于其他原因不使用它,请从控制器中删除alt_heter __construct()。