Bonjour,

J'ai suivi la formation la POO en php et je suis maintenant confronté à un problème, j'aimerais pouvoir charger un model depuis un autre model mais je ne vois pas trop la procédure à suivre pour le faire.

La solution que j'ai trouvée est la suivante :
c'est de charger le model B dans mon controlleur A,
de faire $types = $this->ModelB->getTypes();
$this->ModelA->getSummary($types);

Y a t il moyen de charger le modèle directement depuis un autre modèle ?

Merci d'avance pour votre aide.

3 réponses


Salut,

Que veux-tu dire par "charger un modèle depuis un autre modèle" ? Normalement, un modèle est censé représenter une table de la BDD il me semble.

Si tu veux pouvoir faire des choses plus poussées, je te conseille d'utiliser un ORM (https://www.grafikart.fr/tutoriels/cakephp/cakephp-orm-638).

dnz
Auteur

En fait je viens de me rendre compte que je crois que je fais les choses au mauvais endroit, je crois que j'essaye de faire trop de choses dans mon modèle.

Corrige moi si je me trompe : les fonctions dans le modèle ne servent normalement qu'à prendre les infos dans la db et les retourner au controlleurs ?

Si je veux réaliser un tableau du style :

Type | total pris | total a prendre

sachant que type est une table, total a prendre est une table et total pris et une somme de jours pris dans une 3eme table

Je dois demander a mon controlleur d'aller chercher les types, les totaux et de faire le travail dans le controlleur ?

Salut,
si je comprends bien, tu te compliques ton travail sur quelquechose de très simple. Je m'explique.
Tu dois dire à ton controller d'appeler une fonction de ton modèle qui va te récupérer les infos que tu souhaites dans ta base de données. Tu peux le faire en passant une requète sql en paramètre.

Il faut simplement que tu utilises les jointures en SQL de façon à récupérer des informations de différentes tables dans une même requète. Si tu ne connais pas les jointures en SQL, tu cherches de la doc, tu trouveras sans aucun problème. C'est quelquechose qui n'est pas compliqué et qui est très important.

Un bon moyen pour réussir ça est de mettre un attribut ID dans chacune de tes tables qui correspond à ce que tu cherches, je ne comprends pas trop si c'est une facture ou un produit ou autre mais ça reviendrait au même.

L'appel à la fonction serait du type :
$this->find($id);
La requète serait du style:
SELECT Type.nom TotalPris.total TotalAPrendre.valeur FROM Type, TotalPris, TotalAPrendre WHERE TYPE.ID=$ID AND Type.ID = TotalPris.ID AND TotalPris.ID = TotalAPrendre.ID

Si tu utilises un gros framework, tu n'as probablement pas de fonction à définir dans ton modèle vu qu'elle existe déjà, si elle n'existe pas, tu définis une simple fonction qui fait une requète sql en prenant un ID en paramètre.

N'hésite pas si tu veux des précisions.