2017-01-22 5 views
0

In CodeIgniter 3.1.3 I CI_Model in application/Kern erweitert/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(); 
    } 

} 

Meine User_model wie folgt aussieht:

class User_model extends MY_Model { 

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

} 

I verlängert auch die CI_Controller in application/Kern/MY_Controller wie folgt:

class MY_Controller extends CI_Controller { 

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

ich automatisch geladen die Datenbankverbindung in applic ation/config/autoload.php als: Ich konnte Migrationen laufen, so dass die Datenbankverbindung korrekt konfiguriert ist

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

Ohne den User_model in der Steuerung geladen werden. Aber wenn ich $ this-> load-> model ('User_model') hinzugefügt habe, bekomme ich den Fehler "Undefined property: User_model :: $ db".

Wenn ich User_model erweitern CI_Model läuft es ohne Fehler und mit einem var_dump in der Homepage-Controller zeigt es, dass die Datenbank automatisch geladen wird. Aber sobald ich MY_Model dazwischen setze, ist die Datenbankklasse im Modell nicht definiert und auch $ this-> load im Modell gibt NULL zurück, so dass das Modell als nicht korrekt konstruiert erscheint.

Ich kann mir nur vorstellen, dass dies ein sehr kleiner Fehler ist, aber ich habe es stundenlang mit mehreren Unterbrechungen dazwischen angeguckt und ich sehe es einfach nicht. Kann mir sonst noch jemand helfen?

Antwort

0

Von einem Controller läßt, sagen A_controller

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

In MyLib, meine ursprüngliche Ausgabe dieser Block

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

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

Dann kommt das Wunder ist, wenn es

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

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

Wenn CI worden lädt ein Modell $ db -Eigenschaft mit CI kommen. Also, wenn Sie $ this-> db im Modell aufrufen, was bedeutet, Sie wollen "my_model" die Eigenschaft haben, oder? Was ich gerade getan habe, verknüpfen Sie die Eigenschaft von CI zu my_model !!!

Verwandte Themen