Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[PHP5] ORMAPPER 4 CRUD


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : ORM, Reflection, Mapping, classe, php5 Niveau : Initié Date de création : 07/12/2008 Date de mise à jour : 17/12/2008 22:35:40 Vu / téléchargé: 1 647 / 81

Note :
Aucune note

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

Description

Pourquoi réécrire moult fois les même choses ... A rien!
Ce petit mapper sans grande prétention permet de mapper une BdD mysql (il sera surement porté sur plus de db quand j'aurais le temps!) De plus il manque la notion de clef étrangère enfin moult choses !!!
Donc !

D'abord On configure VarType.cls.php pour définir quel type de donnée mysql sera géré par quel classe de Typage.

Ensuite, dans l'index.php il faut définir la BdD et le dossier ou il va cracher les classes.

Enfin, il faut copier les classes Boolean,Crud,Database,Factory,Float,Integer,Null,Type,Node est c paré !

Un autoload et ça va vous booster le dev' !

Si vous voyez des coquilles, si vous voulez participer, si vous voulez quoique ce soit dites le ! :D

Have Fun'

Mise à jour : 17/12/2008

La mise à jour est arrivée et continuera d'arriver petit à petit!
Au programme j'ajoute quelques fonctionnalités et surtout des trucs qui marchait pas top fonctionneront :D (Oups^^)

ClassGenerator
la methode toXml est disponible, elle transforme un objet en xml tout simplement. A voir pour faire du XPath bientôt ^_^
(il faut copier aussi Node pour cette méthode)

CRUD
C : Create, on peut obtenir le nouvel enregistrement dans l'objet courant!
R : Retrieve, on peut "forcer" le cast des membres (Objet quand tu nous tiens ^^) et on peut utiliser le LIKE pour les String! (Yes i like String ;) désolé)
U : Update, On peut utiliser le LIKE :) On se base toujours sur la PK et on met a jour les membres n'ayant pas un Type contenant une instance de Null. Attention aux tables sans PK ça marche pas ! et ça vous plantera !
D : Delete, On peut utiliser le LIKE :) On se base sur tous les champs donné de type non Null

Classes de Typage "fort"
Forçage/Souplesse de cast vers le Type voulu si il correspond aux critères "logique"
'0' et '1' peuvent devenir un Integer et un Boolean
'100' peut devenir un Integer
Intégration de "nouveaux" types pour MySQL (ceux donnés par AKHENATHON)

J'ajoute "l'environnement de developpement"

1/Créer une BdD tester

y mettre une table de test...

CREATE TABLE `users` (
  `id_users` int(10) unsigned NOT NULL auto_increment,
  `login_users` varchar(50) NOT NULL,
  `password_users` varchar(50) NOT NULL,
  `email` varchar(200) NOT NULL,
  `money` int(10) unsigned NOT NULL,
  `coin` int(10) unsigned NOT NULL default '0',
  `active` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY  (`id_users`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=56 ;


Les reste est dans le dossier Tester donc configurez si nécessaire...
régénérez la classe si besoin puis ne modifiez que index.php dans Tester pour faire vos tests.

Je reste ouvert à toute proposition qui fera avancer :)

 

Conclusion

Début d'un Fw maison !
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

17 décembre 2008 22:32:29 :
La mise à jour est arrivée et continuera d'arriver petit à petit! Au programme j'ajoute quelques fonctionnalités et surtout des trucs qui marchait pas top fonctionneront :D (Oups^^) ClassGenerator la methode toXml est disponible, elle transforme un objet en xml tout simplement. A voir pour faire du XPath bientôt ^_^ (il faut copier aussi Node pour cette méthode) CRUD C : Create, on peut obtenir le nouvel enregistrement dans l'objet courant! R : Retrieve, on peut "forcer" le cast des membres (Objet quand tu nous tiens ^^) et on peut utiliser le LIKE pour les String! (Yes i like String ;) désolé) U : Update, On peut utiliser le LIKE :) On se base toujours sur la PK et on met a jour les membres n'ayant pas un Type contenant une instance de Null. Attention aux tables sans PK ça marche pas ! et ça vous plantera ! D : Delete, On peut utiliser le LIKE :) On se base sur tous les champs donné de type non Null Classes de Typage "fort" Forçage/Souplesse de cast vers le Type voulu si il correspond aux critères "logique" '0' et '1' peuvent devenir un Integer et un Boolean '100' peut devenir un Integer Intégration de "nouveaux" types pour MySQL (ceux donnés par AKHENATHON) J'ajoute "l'environnement de developpement" 1/Créer une BdD tester y mettre une table de test... CREATE TABLE `users` ( `id_users` int(10) unsigned NOT NULL auto_increment, `login_users` varchar(50) NOT NULL, `password_users` varchar(50) NOT NULL, `email` varchar(200) NOT NULL, `money` int(10) unsigned NOT NULL, `coin` int(10) unsigned NOT NULL default '0', `active` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id_users`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=56 ; Les reste est dans le dossier Tester donc configurez si nécessaire... régénérez la classe si besoin puis ne modifiez que index.php dans Tester pour faire vos tests. Je reste ouvert à toute proposition qui fera avancer :)
17 décembre 2008 22:34:36 :
Mise à jour : 17/12/2008
17 décembre 2008 22:35:40 :
Mise à jour : 17/12/2008

Commentaires et avis

signaler à un administrateur
Commentaire de aKheNathOn le 09/12/2008 18:12:51

Je lis le code et je te fais un retour, mais à première vue ça me semble très bien construit :)

signaler à un administrateur
Commentaire de Teclis01 le 10/12/2008 10:26:40

Merci beaucoup :)
J'attendais ce premier commentaire avec beaucoup d'espoir et ça fait vraiment plaisir!
Je modifierais petit a petit la source pour y ajouter un exemple, l'utilisation de la classe Database pour l'index >_< et une plus grande richesse de "composants" donc si ça vous intéresse restez dans le coin ^^

signaler à un administrateur
Commentaire de aKheNathOn le 10/12/2008 11:21:19

J'ai cette erreur :

Fatal error: Cannot clone object of class PDO due to 'zend.ze1_compatibility_mode' in ..\index.php on line 17

En mettant ça : $oPDO =& new PDO ... ça passe (PHP 5.2.6)

---

Après la partie sélection des tables ne passe pas chez moi - en remplaçant par ce code ça passe :

$sQuery = 'SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA=\''.$sDatabase.'\'';
$aResultTables = $oPDO->query($sQuery)->fetchAll();

---

Après j'ai une erreur de type : Connection failed: THE TYPE IS UNDEFINED. J'ai rajouté ces définitions dans VarType.cls.php :

'text'=>'String','blob'=>'String','timestamp'=>'Integer','mediumint' => 'Integer'

---

En regardant le résultat je vois :
const MODEL='a:6:{i:1;O:5:"Field":9:{s:20:"

Y'à une erreur quelque part car le serialize n'est pas finit.

Sinon serialize et unserialize c'est une perte de perfs, regardes du côté de : http://fr2.php.net/manual/en/function.var-export.php

---

Ptite remarque générale, dommage qu'au niveau de ton modèle tu ne gère pas les datasets - pour le moment tu est au niveau des entités, mais je ne vois pas comment tu peux gérer une requette de type select ... where ...

---

Je reste dans le coin ;),

Akh

signaler à un administrateur
Commentaire de Teclis01 le 10/12/2008 12:10:12

Alors le début vient de la config serveur :
http://www.manuelphp.com/php/ini.zend.ze1-compatibility-mode.php
De mon côté je ne gère pas le clonage de la classe PDO  
http://fr.php.net/pdo

Ensuite la modif pour donner database en string euh ... autant le faire à la mode PDO ^^ je modifierais pour ceci ...
$oPDOStatement->bindParam(':database', $sDatabase, PDO::PARAM_STR);
Il doit se vautrer sur le type de la variable.
Ce qui est une bonne remarque pour la classe Crud car je ne donne aucun type alors que je les ai!


Pour THE TYPE IS UNDEFINED, tu as bien fait de chercher dans VarType.cls.php
En fait, cette classe fait correspondre à un type de champs contenu dans DATA_TYPE une classe de gestion de type. Ta modif pour ajouter ces types semble correcte.

Je veux bien la structure de la table qui fait planter le serialize du model de la classe si c'est possible (pour comprendre pq ca pete un cable) ^_^
Le serialize est il est vrai lourd mais me sert a être réutilisable en JS! (c'est le seul moyen que je connaisse)

Pour Le Crud, je suis parti du principe que l'on ne change QUE les champs n'étant pas une clef primaire.
C :
Pour une insertion on met une instance de la classe Type "contenant" une instance de la classe Null dans la clef primaire du modèle. Ensuite, je construit la requete d'insertion.

R :
Pour un retrieve, je pars du principe qu'on connait que les champs d'une instance du modele/controleur.

PS: Au retour de la requete, je ne cast pas le ResultSet car a mon sens c'est un non sens (et une perte de perf). il revient sous forme de string il le reste puisque c'est sensé être affiché à 70% des cas d utilisation. A voir un param pour "forcer" le typage du retour!

U :
Pour un update, le fonctionnement est pareil que R

D :
Pour un delete, le fonctionnement est pareil que R

En gros je pars du principe que qd on veut qqch on fait une instance du model/controleur et on balance la méthode!

PS :
Il faut effacer les lignes euh ... 166 a 169 de Crud.cls.php (c'est du debug :p)

signaler à un administrateur
Commentaire de Teclis01 le 17/12/2008 22:37:51

Au secoursssss la prévisualisation met à jour sans mon avis :/
La mise en page du texte était degeu je l'ai passée dans l'explication de la source en ajoutant le date histoire d'avoir un espèce de versionning Au zecoursss les zadmineu >_<

signaler à un administrateur
Commentaire de Teclis01 le 04/01/2009 23:41:56

La prochaine release arrive bientôt !!! :)
Juste pour savoir si ça interesse qqun ou si ya des erreurs ou des choses mal pensées/mal faites dites le moi ça serait sympa...

signaler à un administrateur
Commentaire de dorian91 le 09/01/2009 12:12:16

Salut,
J'ai une petite suggestion quand tu génère la classe modele pourquoi ne fais tu pas une classe abstraite (Ex : abstract Crud) qui contient toutes les méthodes et tu fais etendre ta classe modele. Ca évite la redondance de code au pire tu génère juste le constructeur qui passe les paramètres qui faut a la classe Crud

Sinon j'ai pas encore testé je te dis mon avis apres mes test
A+

signaler à un administrateur
Commentaire de dorian91 le 10/01/2009 01:04:41

Re salut
Une autre petite suggestion pour tes requetes PDO utilise des requetes préparé comme ca tu evite les injections sql
A+

signaler à un administrateur
Commentaire de dorian91 le 10/01/2009 01:07:34

Euh en fait j'ai du halluciner car tu utilise des requetes prepare (dsl fatigué ^^)

signaler à un administrateur
Commentaire de Teclis01 le 13/01/2009 14:22:08

Euh je viens juste de voir tes remarques et euh je sais pas pq je fais comme ça...
Je suis en train de préparer une nouvelle mouture avec notamment les FK. Je me penche sur ta suggestion juste après :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

[PHP5] Etendre une classe prédéfinie [ par ZuGbEn ] Bonjour !Je débute plus ou moins dans la programmation orientée objet, et je souhaite faire une classe qui, à partir d'un DomNode existant, ajoute des Fonctionnement SDO [ par guill76 ] Bonjour,Je viens de découvrir un petit peu l'extension SDO de PHP5 que j'ai récupérée en installant PHP5.2.5 il ya environ un semaine et dans cette ex Pb classe COM [ par iklo18 ] Bonjour,Je suis actuellement en stage, je dois réaliser un module d'inscriptions en ligne.J'ai donc réalisé un formulaire dont je récupère les données Migration PHP4 vers PHP5 [ par ralebole ] Bonjour mon hebergeur à supprimer le Php4 pour le Php5Je me retrouve maintenant avec un message d'erreur sur mon scriptWarning: getenv() has been disa Classe d'accès à une base de données [ par MadM@tt ] Bonjour à tous,Voilà j'ai réalisé une classe de connexion à une base de données.Seulement maintenant, pour l'utiliser, je suis face à un choix sur leq Détruire un objet dans son constructeur [ par MadM@tt ] Bonjour à tous,J'ai une classe :class Compte {    ... // Constructeur    function Compte( $ID ) {       // Connexion à la BD et récupération des info passer une instance d'une classe par les sessions [ par hybride11 ] Bonjour ,  dans une application qui comporte plusieurs fichiers *.php qui seront appelés à un moment donné dans l'appli, est il possible de faire pass erreur class redeclare !!! [ par g_fuck ] Salut tout le monde! il se fait que dans une de mes page j'ai besoin d'une class CLASSE_1 donc je fait dans ma page include(url/CLASSE_1.php);Et comme classeforms.php [ par skulls94 ] bonjour,je dois realiser un formulaire qui interagit avec une bdd. Pour cela j'utilise la classe classeforms.php voir: http://www.toutestfacile.com/cl


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,718 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.