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

[已解决] 模型中为什么非要加这句?

[复制链接]
发表于 2013-1-25 14:33:52 | 显示全部楼层 |阅读模式
本帖最后由 cccen 于 2013-1-26 12:58 编辑

我新建个模型,总是有错误提示:Call to a member function query() on a non-object
但是在构造函数中加上$this->load->database();就正常了。

这是调用数据库初始化方法吧,可是我看别的程序也不需要这句啊,怎么回事?
database.php我也配置了
发表于 2013-1-25 16:26:17 | 显示全部楼层
config配置文件中 $config['sess_use_database']=TRUE;就可以不用$this->load->database();
发表于 2013-1-25 16:27:02 | 显示全部楼层
前提你数据库要创建保存session表才可以正常

评分

参与人数 1威望 +5 收起 理由
cccen + 5 很给力!

查看全部评分

发表于 2013-1-26 10:20:46 | 显示全部楼层
你可以在/application/config/autoload.php 里修改

PHP复制代码
$autoload['libraries'] = array('');
复制代码




PHP复制代码
$autoload['libraries'] = array('database');
复制代码

评分

参与人数 1威望 +5 收起 理由
cccen + 5 很给力!

查看全部评分

发表于 2013-1-26 12:31:21 | 显示全部楼层
在构造函数中加上$this->load->database()是载入数据库类,相当于在控制器中实例化一个数据库类对象,之后才可以调用数据库类的方法。
你说的有的地方用,有的地方没用$this->load->database();是因为载入数据库类有两种方法,一种是手动载入,一种是自动载入。
用户指南上写的摘录如下:
载入模型
模型可以在 控制器 中被引用。 就像这样:
$this->load->model('Model_name');
如果模型文件在子文件夹下,引用的时候要带上相对路径名。例如:如果你有一个模型 application/models/blog/queries.php。 下面的代码可以引用它:
$this->load->model('blog/queries');
模型一旦被载入,你就能通过下面的方法使用它:
$this->load->model('Model_name');
$this->Model_name->function();
在默认的情况下模型名称就直接被引入作为对象名,就如上面所示。当然,如果你愿意,可以起个更好记的对象名!那么,可以在加载模型函数中指定第二个参数来设定,例如:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();
这里有个控制器的例子,加载一个模型,然后通过视图显示出来
class Blog_controller extends CI_Controller {

    function blog()
    {
        $this->load->model('Blog');

        $data['query'] = $this->Blog->get_last_ten_entries();

        $this->load->view('blog', $data);
    }
}
自动载入模型
如果您需要一个在整个项目中都起作用的特定模型,您可以让 CodeIgniter 在初始化时自动装载它。实现的方法是打开 application/config/autoload.php 文件,然后在自动装载数组中添加上这个模型。
备注: 经过测试(以加载一个模型为例)自动加载模型和手动载入模型时,消耗的内存情况是一样的!但是当加载模型越多消耗内存就会越大。自动加载模型是要牺牲内存消耗换取的,所以尽量不要自动加载不必要贯穿全站项目的模型!

评分

参与人数 1威望 +5 收起 理由
cccen + 5 很给力!

查看全部评分

 楼主| 发表于 2013-1-26 12:57:06 | 显示全部楼层
曜日晨阳 发表于 2013-1-26 10:20
你可以在/application/config/autoload.php 里修改

谢谢,成功了
 楼主| 发表于 2013-1-26 12:57:43 | 显示全部楼层
CloudMind 发表于 2013-1-26 12:31
在构造函数中加上$this->load->database()是载入数据库类,相当于在控制器中实例化一个数据库类对象,之后 ...

回复的真详细,呵呵,连消耗内存都解释了!非常感谢!

本版积分规则