Codeigniter Неопределенное свойство: xxxx_model :: $ db только от Model - PullRequest
4 голосов
/ 20 июня 2011

Первый класс модели:

    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 ]

8 голосов
/ 12 февраля 2013

Сначала вы должны загрузить библиотеку db. В autoload.php добавьте следующий код,

$autoload[‘libraries’] = array(‘database’);
5 голосов
/ 20 июня 2011

Чтобы добавить к ответу 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, он уже должен быть загружен для вас.

2 голосов
/ 06 июня 2018

добавить библиотеку 'база данных' в автозагрузку.

/ приложение / Config / autoload.php

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

Вероятно, вы начали новый проект, как я; -)

2 голосов
/ 20 июня 2011

Если function XxxxModel() не ваш конструктор, вы не загружаете базу данных, вызывая $this->xxxxModel->isInDatabase();

Попробуйте автозагрузить библиотеку базы данных из autoload.php или создайте надлежащий конструктор в вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...