7777777 发表于 2011-3-28 09:53:33

Call to a member function get() on a non-object

本帖最后由 7777777 于 2011-3-28 11:46 编辑

我在model当中调用$query = $this->db->get("users");时候,报出
Call to a member function get() on a non-object错误,debug中得出$this->db未被载入

但是奇怪的是我在Controller中调用$query = $this->db->get("users");的时候一切正常。

不知是何原因,另外,我已经把'database'添加到$autoload['libraries']当中了。。。:sleepy:

另外:
CI的版本是:2.0.1
以下是DB的配置
$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'test';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Hex 发表于 2011-3-28 12:24:15

你的模型没有调用父类构造函数吧?
贴下你的模型的构造函数。

7777777 发表于 2011-3-28 14:03:28

以下是我的模型的代码:
class User_Model extends CI_Model {
        var $id = "";
        var $userName = "";
        var $pwd = "";
       
   
        function __construct() {
                parent::__construct();
        }
   
    function get_user_list() {
            var_dump($this);

            $query = $this->db->get("users");
            return $query->result();
    }
   
   
}

7777777 发表于 2011-3-28 14:45:21

原因找到了,我为了能在IDE中获得Model和Controller的提示功能,我在CI_Model中添加了一些个变量的声明,例如:

var $benchmark;
var $calendar;
var $config;
var $db;
等等

只要把上面的声明删掉,就不会报错了,但是为什么Controller中也加了这些的声明,为什么就不报错了,难道是CI_Model类初始化变量加载顺序的问题??具体没看源码,不大清楚了。表示疑问

Hex 发表于 2011-3-28 14:46:02

你的模型看起来没问题,你的控制器呢?

7777777 发表于 2011-3-28 15:05:12

也不是控制器的问题,我只要把后加到CI_Model类中的变量都删除了,就不报错了。多谢了,哪天有空看看源码这个部分是怎么写的。

tttlh 发表于 2011-5-30 14:55:25

果然啊。。。

yoen.xu 发表于 2011-11-2 17:38:12

当一个模型被载入时,它并不会自动连接数据库。以下方法可以使您连接数据库:

您可以使用标准方法来连接数据库(说明), 也可以通过控制器或者您的自定义模型。
您可以把第三个参数设置为TRUE来使模型装载函数自动连接数据库,连接配置可以在您的数据库配置文件中可以定义:
$this->load->model('Model_name', '', TRUE);
页: [1]
查看完整版本: Call to a member function get() on a non-object