Database Codeigniter未定义属性:xxxx_模型::$db仅来自模型

Database Codeigniter未定义属性:xxxx_模型::$db仅来自模型,database,codeigniter,view,Database,Codeigniter,View,首先是模型类: class Xxxx_model extends Model { function XxxxModel() { parent::Model(); $this->load->database(); } function isInDatabase() { // Please ignore the sql query, it's just to sh

首先是模型类:

    class Xxxx_model extends Model
    {
      function XxxxModel()
      {
        parent::Model();
        $this->load->database();
      }

      function isInDatabase()
      {
        // Please ignore the sql query, it's just to show some random sql code with results
11.      $result = $this->db->query('SELECT * FROM someTable WHERE ...');
        $numberOfRows = $result->num_rows();
        ... 
        return $test;
      }
    }
现在控制器:

function someLogic()
{
  $this->load->model('xxxx_Model', 'xxxxModel'); // not necessary to specify
  $this->xxxxModel->isInDatabase();
}
当我运行此命令时,会出现以下错误:

Severity: Notice  --> Undefined property: Xxxx_model::$db .../xxxx_model.php line 11

我不知道这是为什么。如果我将db代码放在控制器中,它似乎可以工作,只有在模型中使用此设置时,它才会失败。我一辈子都搞不清楚代码哪里出错了…

如果
函数XxxxModel()
不是你的构造函数,你就不是通过调用
$this->XxxxModel->isindabase()来加载数据库的


尝试从
autoload.php
中自动加载数据库库,或在模型中创建适当的构造函数。

要添加到atno的答案中:

class Xxxx_model extends Model
{
  function XxxxModel() //<--- does not match model name Xxxx_model
  {
    parent::Model();
    $this->load->database();
  }

我可能弄错了(有一段时间没有使用1.x),但是如果您构造模型类,则无需加载数据库。如果您使用的是
config/database.php
中的默认连接设置,则应该已经为您加载了数据库。

您必须先加载db库。在
autoload.php
中添加以下代码

$autoload[‘libraries’] = array(‘database’);

将库“datatabase”添加到自动加载

/application/config/autoload.php

$autoload['libraries']=数组(
“数据库”
);


很可能你开始了一个新项目,就像我一样;-)

如果是这种情况,他可能会有不同的错误(即未找到类模型),但如果不是这样,则您是正确的。+1到您的编辑-很好。我相信OP会回来声称这是一个输入错误,我不认为有理由隐藏模型名,Xxxxx几乎不可读。如果我只在几个地方需要它,那么自动加载每个url的性能不是有成本吗?顺便说一句,这确实解决了问题。是的,如果您不需要在每个页面上都连接数据库,那么性能会受到轻微的影响。如果仅在放置时需要它,则可以创建一个
MY\u DB\u Model
类,该类将扩展
Model
,并包含数据库加载。每次您需要从数据库中获取数据时,请扩展该模型,否则CI的
模型
。请标出解决您问题的正确答案。@StephaneGrenier:如果
$this->db
在您的控制器中工作,但模型已损坏,则您已经加载了数据库……事实上,如果
$this->db
可用并在控制器中工作,则绝对不需要加载数据库,没有让模型按预期加载它。我不敢相信我错过了构造函数的名称!那太残忍了。由于时间线的原因,我一直在进行长达36个多小时的编码狂潮。这绝对是问题之一。我必须更改模型的名称,以便根据文档正确加载,我想我也错过了重构构造函数的名称。顺便说一句,如果我调整了构造函数的名称,我就不必再自动加载数据库了。是的:)@StephaneGrenier:打开一些死亡金属,煮些咖啡来唤醒你:)还有,将来有一天一定值得看看当前的2.x版本,这是一个非常简单的升级过程,文档也有点更好。我在考虑,但我的最后期限也很紧,根本没有时间升级。我将很快研究它,看看除了版本号增加之外还有什么新的和令人兴奋的;)这是一个非常棒的框架,非常完美!我正在启动一个新项目问这个问题的人已经使用了$this->load->database()。所以在我看来,自动加载是不需要的。
$autoload[‘libraries’] = array(‘database’);