Codeigniter Undefined property: xxxx_model::$db nur aus dem Modell
Zuerst die Model-Klasse:
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;
}
}
Nun die Steuerung:
function someLogic()
{
$this->load->model('xxxx_Model', 'xxxxModel'); //not necessary to specify
$this->xxxxModel->isInDatabase();
}
Wenn ich diesen starte, bekomme ich die Fehlermeldung:
Severity: Notice --> Undefined property: Xxxx_model::$db .../xxxx_model.php line 11
Ich habe keine Ahnung, warum das so ist. Wenn ich den db-code in den controller scheint es zu funktionieren, es ist nur mit diesem setup im Modell, dass es fehlschlägt. Ich kann nicht für das Leben von mir herauszufinden, wo der code ist Irre...
InformationsquelleAutor Stephane Grenier | 2011-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen atnos Antwort:
Grundsätzlich, Sie sind nicht der Konstruktion der Klasse oder der übergeordneten Klasse
Model
. Wenn Sie auf PHP5, können Sie__construct()
, sonst müssen Sie entsprechen den Klassennamen exakt, unabhängig von welchem alias Sie laden Sie es mit Ihrem controller. Beispiel:Ich kann mich irren (habe nicht 1.x in eine Weile), aber wenn Sie erstellen die Model-Klasse, es gibt keine Notwendigkeit, diese Datenbank zu laden, wenn Sie die Standard-Verbindungseinstellungen in
config/database.php
sollten es schon werden für Sie geladen.In der Tat, laden die Datenbank ist definitiv nicht erforderlich, wenn
$this->db
zur Verfügung Stand und die Arbeit in den controller, wie bereits erwähnt, die zimmerreserviereung, ohne das es geladen werden, indem das Modell wie erwartet.Ich kann nicht glauben ich verpasste den Konstruktor name! Das ist brutal. Ich habe schon bei 36+ Stunden-coding-spree wegen einer Zeitleiste. Das ist sicherlich eines der Probleme. Ich musste den Namen ändern, der das Modell für Sie werden korrekt geladen, entsprechend zu den docs, wo ich denke, ich verpasste auch die Umgestaltung der name des Konstruktors.
Btw, wenn ich einstellen das der name des Konstruktors, ich habe nicht auf das automatische laden der Datenbank nicht mehr. Yeah 🙂
Schalten Sie einige death-metal-und einige machen Kaffee zum aufwachen 🙂 Auch, definitiv Wert heraus überprüfen, die aktuelle 2.x eines Tages, es ist eine sehr einfache upgrade-Prozess und die docs sind ein bisschen besser als gut.
InformationsquelleAutor Wesley Murch
Lädst du die db-library-ersten. In
autoload.php
fügen Sie folgenden code,InformationsquelleAutor uwublogs
Wenn
function XxxxModel()
ist nicht der Konstruktor, du bist nicht das laden der Datenbank durch aufrufen von$this->xxxxModel->isInDatabase();
Versuchen autoloading die Datenbank-Bibliothek aus
autoload.php
oder erstellen Sie eine korrekte Konstruktor in Ihrem Modell.+1 auf das Bearbeiten - guter Fang. Ich bin sicher, die OP wird wieder kommen und behaupten, es war ein Tippfehler, ich sehe keinen Grund zu verstecken das Modell name Xxxxx ist kaum lesbar.
Ich bin mit der version 1.7.2
ich aktualisiert meine Antwort.
Ja, es ist ein kleiner Leistungseinbruch, wenn Sie nicht brauchen, Datenbank Verbindung auf jeder Seite. Wenn Sie gerade brauchen es nur, wenn Sie Orte, die Sie erstellen können ein
MY_DB_Model
Klasse, verlängernModel
und die Datenbank laden. Jedes mal, wenn Sie brauchen, um abrufen von Daten von einer DB zu erweitern, Modell, anderes CIModel
. Bitte markieren Sie die richtige Antwort, dass dein problem gelöst.InformationsquelleAutor afarazit
Bibliothek hinzufügen 'datatabase' autoload.
/application/config/autoload.php
$autoload['libraries'] = array(
'database'
);
Vermutlich bist du neu angefangen Projekt, gefällt mir 😉
InformationsquelleAutor Tonci14