Codeigniter Undefined property: xxxx_model::$db seulement de Modèle
Premier de la classe du Modèle:
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;
}
}
Maintenant le contrôleur:
function someLogic()
{
$this->load->model('xxxx_Model', 'xxxxModel'); //not necessary to specify
$this->xxxxModel->isInDatabase();
}
Lorsque je l'exécute, je reçois l'erreur:
Severity: Notice --> Undefined property: Xxxx_model::$db .../xxxx_model.php line 11
Je n'ai aucune idée de pourquoi c'est. Si je mets de la db code du contrôleur, cela semble fonctionner, c'est qu'avec cette configuration dans le modèle qu'il échoue. Je ne peux pas pour la vie de me comprendre où le code est égaré...
OriginalL'auteur Stephane Grenier | 2011-06-20
Vous devez vous connecter pour publier un commentaire.
À ajouter à atno réponse:
Fondamentalement, vous n'êtes pas la construction de la classe ou la classe parent
Model
. Si vous êtes sur PHP5, vous pouvez utiliser__construct()
, sinon vous devez faire correspondre le nom de la classe exactement, indépendamment de ce que les alias de le charger dans votre contrôleur. Exemple:Je me trompe peut-être (n'avez pas utilisé 1.x en temps), mais si vous construisez le Modèle de la classe, il n'y a pas besoin de charger la base de données si vous utilisez les paramètres de connexion par défaut dans
config/database.php
, il devrait déjà être chargé pour vous.En fait, le chargement de la base de données est certainement pas nécessaire si
$this->db
était disponible et de travail dans le contrôleur comme mentionné, sans l'avoir chargé par le modèle comme prévu.Je ne peux pas croire que j'ai manqué le constructeur de nom! C'est brutal. J'ai été sur un 36 heures de codage virée à cause d'un scénario. C'est certainement l'une des questions. J'ai dû modifier le nom du modèle pour qu'il soit correctement chargé en fonction de la docs, où je suppose que je l'ai raté aussi le refactoring, le nom du constructeur.
Btw, si je régler le nom du constructeur, je n'ai pas à chargement automatique de la base de données de plus. Ouais 🙂
Mettez un peu de death metal et de faire du café pour vous réveiller 🙂 Aussi, certainement la peine de vérifier le 2 courant.x un jour, c'est un très simple processus de mise à niveau et les docs sont un peu mieux ainsi.
OriginalL'auteur Wesley Murch
Vous devez charger la bibliothèque db première. Dans
autoload.php
ajouter le code ci-dessous,OriginalL'auteur uwublogs
Si
function XxxxModel()
n'est pas votre constructeur, vous n'êtes pas le chargement de la base de données en appelant$this->xxxxModel->isInDatabase();
Essayer d'auto-chargement de la base de données de la bibliothèque de l'intérieur
autoload.php
, ou la création d'un constructeur dans votre modèle.+1 pour ton edit - bonne prise. Je suis sûr que l'OP va revenir et dire que c'était une faute de frappe, je ne vois pas de raison de cacher le nom du modèle, Xxxxx est à peine lisible.
J'utilise la version 1.7.2
j'ai mis à jour ma réponse.
Oui, il y a un petit gain de performance si vous n'avez pas besoin de connexion à la base de chaque page. Si vous avez juste besoin uniquement si vous les endroits que vous pouvez créer un
MY_DB_Model
classe qui permettra de prolongerModel
et inclure la base de données de chargement. Chaque fois que vous avez besoin d'extraire des données à partir de votre DB étendre ce modèle, sinon CIModel
. Veuillez cocher la bonne réponse qui a résolu votre problème.OriginalL'auteur afarazit
add library "datatabase' à chargement automatique.
/application/config/autoload.php
$autoload['libraries'] = array(
'database'
);
Probablement que vous avez commencé un nouveau projet, comme moi 😉
OriginalL'auteur Tonci14