2017-01-22 3 views
0

В CodeIgniter 3.1.3 Я продлил CI_Model в приложении/ядра/MY_Model.php:

class MY_Model extends CI_Model { 

    public function __construct($id = NULL) { 
     parent::__construct(); 
     $this->load($id); 
    } 

    public function load($id) { 
     $this->db->where('id', $id); 
     $this->db->limit(1); 
     $query = $this->db->query($this->_table); 
     if ($row = $query->result()) { 
      // @todo Process results 
     } 
     // Free the resources. 
     $query->free_result(); 
    } 

} 

Мои User_model выглядит следующим образом:

class User_model extends MY_Model { 

    public function __construct($id = NULL) { 
     parent::__construct($id); 
    } 

} 

Я также продлил CI_Controller в заявке/ядро ​​/ MY_Controller следующим образом:

class MY_Controller extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->model('User_model'); 
    } 
} 

Я автоматически загружаются соединения с базой данных в Applic ция/конфигурация/autoload.php как:

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

без загрузки User_model в контроллере я смог запустить миграцию, поэтому соединение с базой данных настроено правильно. Но когда я добавил $ this-> load-> model ('User_model'), я получаю сообщение об ошибке «Undefined property: User_model :: $ db».

Если я разрешаю User_model расширять CI_Model, он запускается без ошибок и с var_dump на контроллере домашней страницы показывает, что база данных автоматически загружается. Но как только я помещаю MY_Model между ними, класс базы данных не определен в модели, а также $ this-> load в модели возвращает NULL, поэтому кажется, что модель не построена должным образом.

Я могу только представить, что это очень маленькая ошибка, но я смотрел на нее часами с несколькими перерывами между ними, и я просто не вижу этого. Может ли кто-нибудь еще мне помочь?

ответ

0

От контроллера, позволяет сказать A_controller

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

В MyLib, мой первоначальный вопрос этот блок

$ci = &get_instance(); 
    $ci->load->model('my_model'); 

    $this->active_model = $ci->my_model; 

Тогда чудо придет, когда он стал

$ci = &get_instance(); 
    $ci->load->model('my_model'); 
    $ci->my_model->db = & $ci->db; 

    $this->basic_model = $ci->my_model; 

Когда CI загружает модель $ db свойство приходить вместе с CI. Итак, когда вы вызываете $ this-> db в модели, это означает, что вы хотите, чтобы «my_model» имел свойство, не так ли? Что я только что связал свойство с CI с my_model !!!

Смежные вопросы