用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4686|回复: 7
收起左侧

[已解决] Call to a member function get() on a non-object

[复制链接]
发表于 2011-3-28 09:53:33 | 显示全部楼层 |阅读模式
本帖最后由 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']当中了。。。

另外:
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;
发表于 2011-3-28 12:24:15 | 显示全部楼层
你的模型没有调用父类构造函数吧?
贴下你的模型的构造函数。
 楼主| 发表于 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();
    }
   
   
}
 楼主| 发表于 2011-3-28 14:45:21 | 显示全部楼层
原因找到了,我为了能在IDE中获得Model和Controller的提示功能,我在CI_Model中添加了一些个变量的声明,例如:

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

只要把上面的声明删掉,就不会报错了,但是为什么Controller中也加了这些的声明,为什么就不报错了,难道是CI_Model类初始化变量加载顺序的问题??具体没看源码,不大清楚了。表示疑问
发表于 2011-3-28 14:46:02 | 显示全部楼层
你的模型看起来没问题,你的控制器呢?
 楼主| 发表于 2011-3-28 15:05:12 | 显示全部楼层
也不是控制器的问题,我只要把后加到CI_Model类中的变量都删除了,就不报错了。多谢了,哪天有空看看源码这个部分是怎么写的。
发表于 2011-5-30 14:55:25 | 显示全部楼层
果然啊。。。
发表于 2011-11-2 17:38:12 | 显示全部楼层
当一个模型被载入时,它并不会自动连接数据库。以下方法可以使您连接数据库:

您可以使用标准方法来连接数据库(说明), 也可以通过控制器或者您的自定义模型。
您可以把第三个参数设置为TRUE来使模型装载函数自动连接数据库,连接配置可以在您的数据库配置文件中可以定义:
$this->load->model('Model_name', '', TRUE);

本版积分规则