Hey

,
Attention, on mélange pas mal de chose ici

. PDO pour PHP, ODBC pour Microsoft, sont des DAL, des couches d'abstraction pour une relation vers une base de données. Jusque là, on est d'accord.
Un ORM (
Object Relational Mapping pour mémoire) est un modèle objet qui permet de travailler sur une base de données relationnelle. Donc à travers l'objet, on atteint la base de données.
Très souvent, les ORM intègrent une couche DAL (ou un DAL, je ne sais pas trop comment on dit

) pour se simplifier la vie. Si on fait les choses, autant les faire en entier

.
Maintenant, faire une abstraction, soit un ORM, n'est pas si simple. C'est même très dur, très très dur. Coller le plus possible à l'objet, i.e. intégrer les notions d'héritage, d'association, donc d'agrégation, de composition, etc., afin de correspondre (
map) avec un modèle relationnel est un exercice de haute voltige.
Premièrement, il faut un modèle qui soit irréprochable. C'est à dire qu'il doit être d'une simplicité remarquable et ultra modulaire afin de ne jamais rencontrer de soucis ou de cas imprévu. Comme SQL est un langage plutôt « complexe », dans le sens où on peut emboîter beaucoup de chose, on doit pouvoir en faire autant avec notre modèle. Le modèle doit également être simple à cause du constructeur syntaxique, mais ça, c'est secondaire.
Deuxièmement, l'utilisation. Si on utilise un ORM, c'est pour améliorer l'expérience utilisateur. Ça aurait même du être mon premier point en fait. Personne ne l'a évoqué ici et c'est bien dommage. Pourquoi fait-on un DAL ? Afin d'améliorer la maintenance et l'expérience utilisateur. Par expérience utilisateur, j'entends la manipulation de la base de données (ici connexion, soumission de requête, etc.). Donc pour l'ORM, c'est identique. On n'a pas envie d'écrire nos sélections, nos mises à jour, et tout le toutime systématiquement. C'est lassant, très lassant. Et très souvent, on remarque qu'une base de données correspond à un modèle objet (voir les méthodes MERISE). Exemple : une table Personne et une table Médecin. Un médecin est une personne, mais on aurait 2 tables distinctes, c'est bête, et lourd à gérer. Toujours 2 requêtes à écrire. Donc l'ORM se propose de faire ça pour nous. Il va savoir que Médecin hérite des propriétés de Personne, et il va lui-même effectuer notre travail quand on va appeler la méthode
insert ou
update par exemple.
Donc c'est ça un ORM. Peu importe la méthode, la technique et la philosophie (d'ailleurs, je ne suis pas toujours d'accord avec ce que dit Tracker sur sa vision de l'ORM). Il faut juste améliorer l'expérience utilisateur au mieux. Pour les cas simples et récurrents, il faut écrire un strict minimum de code. Pour des cas un peu plus complexes et tordus, on aura un peu plus de code, voire même du code verbeux, mais ce n'est pas grave, ce sont des cas rares.
L'image que Tracker a de l'ORM quand il parle de mise en mémoire par exemple, c'est un ORM type Java : EJB par exemple. Mais on ne peut pas faire ça en PHP, ce serait beaucoup trop lourd.
Sékil avait dit une chose pas bête du tout une fois (je ne retrouve plus le sujet), c'est que PHP rencontre du succès car il répond aux exigences du Web, à savoir : il fait les choses bien et
vite. Une application écrite en Objective C ou Java est appelée à être exécutée 1 seule fois en même temps (sauf cas particulier). Une application écrite en PHP est appelée à être exécutée des 10 000 fois à la minute, voire 10 fois plus pour de grosses applications. On ne peut pas déployer un système comme les EJB en PHP, c'est du suicide et de la folie furieuse (et un non-sens effrayant …).
Propel n'est pas vraiment un ORM. Enfin, pas au sens où je vois l'ORM. Mais il s'en approche c'est sûr. ezPDO n'en est pas un du tout, c'est un PDO
like en gros. Pour Zend, leur système a un défaut, il est très très lourd. Il s'effondre même (cf. § précédent).
Il est vrai qu'avec mcorgnet, je travaille sur un ORM. Même si Cyrano n'y travaille plus (faute de temps), la porte lui reste grande ouverte, et il le sait. Mais revenons-en au sujet : j'y travaille avec mcorgnet. C'est pour ça que j'ai pas mal réfléchit à la chose

. Et pour les petits malins qui pensent que faire un ORM, c'est facile, voici une petite estimation : les réflexions sur le forum à propos de l'ORM ont commencé le 12 avril, nous sommes le 11 aout. J'ai écrit les premières (les 600 premières en fait) lignes de code il y a 5 jours. Ça fait donc 5 mois de réflexions plutôt intenses.
Donc pour une fois, je suis d'accord avec zeus quand il dit qu'il ne faut pas réinventer la roue. (Et d'ailleurs, son dernier message est plein de bon sens). S'attaquer à construire un ORM n'est pas une tâche simple, il faut réinventer une roue plus petite

.
En conclusion agité : voit du côté de Propel et Doctrine, ce sera un bon début

.