Codeigniter未定义属性:xxxx_model :: $ db仅来自Model

时间:2011-06-20 18:06:56

标签: database codeigniter view

首先是Model类:

    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代码放在控制器中似乎可以工作,那么只有在模型中使用此设置才会失败。我不能为我的生活弄清楚代码在哪里误入歧途......

4 个答案:

答案 0 :(得分:5)

添加到atno的答案:

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

基本上,您没有构建类 父类Model。如果您使用的是PHP5,则可以使用__construct(),否则您必须完全匹配类名,无论您在控制器中加载它的别名是什么。例如:

class Xxxx_model extends Model
{
  function __construct()
  {
    parent::__construct(); // construct the Model class
  }
}

我可能弄错了(暂时没有使用过1.x),但是如果构建Model类,如果使用config/database.php中的默认连接设置,则无需加载数据库,它应该已经为你加载了。

答案 1 :(得分:5)

您必须先加载数据库库。在autoload.php添加以下代码,

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

答案 2 :(得分:2)

如果function XxxxModel()不是您的构造函数,则不会通过调用$this->xxxxModel->isInDatabase();

来加载数据库

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

答案 3 :(得分:1)

添加库&#39;数据库&#39;自动加载。

/application/config/autoload.php

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

你可以像我一样开始新项目; - )