CodeIgniter和自动加载数据库库

时间:2011-04-19 10:14:40

标签: codeigniter codeigniter-2

我在使用CodeIgniter连接到数据库时遇到了问题。

在模型中,如果我这样做

$this->load->database();

然后是一个查询,例如

$query = $this->db->get('articles', 10);

工作并返回数据。但是,当我删除load->数据库行并尝试使用

自动加载数据库库时
$autoload['libraries'] = array('database');

在application / config / autoload.php中,上述查询失败。因为它在我显式加载库时起作用,所以我的数据库连接不是问题。我正在使用CodeIgniter 2.0.2(当前最新版本)。

由于我的大多数页面使用数据库,我想自动加载它以避免在每个模型中逐个加载它。我是否误解了有关加载数据库的文档或我做错了什么?

7 个答案:

答案 0 :(得分:7)

我知道我可能只是在回答一个死的问题,但我遇到了同样的问题。

如果您正在使用eclipse pdt或类似IDE并通过在构造函数之前添加一些变量来修改系统> core> model.php以获得代码完成,那么自动加载不起作用

我不知道为什么,但事实是它不起作用。我将核心> model.php恢复为原始版本,自动加载工作正常。我现在不接受自动加载,对于CI的新编码器来说真的是一个糟糕的经历。

如果您有解决方法,请发表评论。

答案 1 :(得分:4)

如果您仍然无法解决问题,这只是一种替代方法。只需扩展CI_Model并在构造函数中自动加载数据库库。然后你可以让所有其他模型从该基类继承。

示例:

<?php 
    class My_Model extends CI_Model{
        public function __construct(){
            parent::__construct();
             $this->load->database();
         }
     }

所有其他人将开始:

  <?php
       class Some_Model extends MY_Model{}

此方法的另一个好处是您不必在您创建的每个模型中包含加载代码行。您还可以轻松地将模型之间的共享功能推送到父MY_Model类。

希望它有所帮助!

答案 2 :(得分:1)

这是我的application / config /目录中的database.php

$active_group = 'default';   
$active_record = TRUE;        
$db['default']['hostname'] = 'mydbhost';   
$db['default']['username'] = 'myusername';    
$db['default']['password'] = 'mypassword';    
$db['default']['database'] = 'mydatabase'; 
$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;

检查你的是这样的,然后通过http://codeigniter.com/user_guide/database/configuration.html的用户指南重新运行,并重新阅读config目录中autoload.php文件中的注释。

我的相关内容是:

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

您应该像这样加载数据库:

$this->load->library('database');

答案 3 :(得分:0)

我唯一能想到的是在你的application/config/database.php文件中,以下行设置为false,而不是true。

//['autoinit'] Whether or not to automatically initialize the database.
$db['default']['autoinit'] = TRUE;

其他一切看起来都不错。

答案 4 :(得分:0)

Shababhsiduque,

只是你我们是对的,至少在我的情况下!

使ide工作的解决方法是在另一个CI项目中创建引用变量。

即将系统模型保留在当前项目中,但在另一个项目中进行修改。

然后将php buildpath(project-&gt; properties-&gt; phpbuildpath)更改为包含变量的项目。

请注意,这是Aptana Studio 3的设置。

为我工作。

答案 5 :(得分:0)

在这种情况下,您可以尝试PHP Autoload Class Magic功能。

    function __autoload($class)
{
    if(strpos($class, 'CI_') !== 0)
    {
        @include_once( APPPATH . 'libraries/'. $class . '.php' );
    }
}

此代码必须复制到Application文件夹中的 config.php (在最后一行之后)。

此代码将在需要时自动为您加载库。

它可能会奏效。快乐的编码。

答案 6 :(得分:0)

在我的情况下,问题是因为同一文件中再次出现$autoload['libraries'],并且重置了数组。