首页 文章

CodeIgniter和自动加载数据库库

提问于
浏览
2

我有一个问题,使用CodeIgniter连接到数据库 .

在模型中,如果我这样做

$this->load->database();

然后查询如

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

工作并返回数据 . 但是,当我删除load-> database行并尝试使用自动加载数据库库时

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

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

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

7 回答

  • 0

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

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

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

    如果您有解决方法,请评论 .

  • 0

    如果您仍然无法解决问题,这只是一种替代方案 . 只需扩展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类中 .

    希望能帮助到你!

  • 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');

    您应该像这样加载db库:

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

  • 0

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

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

    其他一切看起来都不错 .

  • 4

    Shababhsiduque,

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

    让ide工作的解决方法是在ANOTHER CI项目中创建引用变量 .

    这就是将系统模型保留在当前项目中,但在另一个项目中进行修改 .

    然后使用变量将php buildpath(project-> properties-> phpbuildpath)更改为项目 .

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

    为我工作 .

  • 7

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

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

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

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

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

  • 0

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

相关问题