cccen 发表于 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表才可以正常

曜日晨阳 发表于 2013-1-26 10:20:46

你可以在/application/config/autoload.php 里修改

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



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

CloudMind 发表于 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 文件,然后在自动装载数组中添加上这个模型。
备注: 经过测试(以加载一个模型为例)自动加载模型和手动载入模型时,消耗的内存情况是一样的!但是当加载模型越多消耗内存就会越大。自动加载模型是要牺牲内存消耗换取的,所以尽量不要自动加载不必要贯穿全站项目的模型!

cccen 发表于 2013-1-26 12:57:06

曜日晨阳 发表于 2013-1-26 10:20 static/image/common/back.gif
你可以在/application/config/autoload.php 里修改




谢谢,成功了

cccen 发表于 2013-1-26 12:57:43

CloudMind 发表于 2013-1-26 12:31 static/image/common/back.gif
在构造函数中加上$this->load->database()是载入数据库类,相当于在控制器中实例化一个数据库类对象,之后 ...

回复的真详细,呵呵,连消耗内存都解释了!非常感谢!
页: [1]
查看完整版本: 模型中为什么非要加这句?