3

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

在模型中,如果我这样做

$this->load->database();

然后是一个查询,例如

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

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

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

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

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

4

7 回答 7

7

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

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

我不知道为什么,但事实是它不起作用。我将 core>model.php 恢复为原始并且自动加载工作正常。我现在没有自动加载,对于 CI 的新编码员来说,这确实是一个糟糕的体验。

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

于 2012-11-02T16:26:54.333 回答
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 类中。

希望能帮助到你!

于 2012-04-20T00:14:11.533 回答
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');

于 2011-04-19T14:33:44.993 回答
0

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

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

其他一切看起来都不错。

于 2011-04-19T14:23:51.023 回答
0

沙巴布西杜克,

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

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

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

然后将 php buildpath (project->properties->phpbuildpath) 更改为带有变量的项目。

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

为我工作。

于 2013-05-12T19:48:47.767 回答
0

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

于 2018-11-18T21:19:22.187 回答
0

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

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

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

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

它可能会起作用。快乐编码。

于 2018-05-05T06:15:48.500 回答