Quel est le meilleur PHP DAL (couche d'abstraction de données) développé à ce jour dans le cadre de tout projet open source que nous pourrions réutiliser de bonne foi?
Je trouve difficile de choisir un DAL pour mon application qui supporte suffisamment l'abstraction des systèmes de bases de données les plus courants (MySQL, PostgreSQL, MSSQL, Oracle, etc.) et est:
Quelques bibliothécaires à considérer:
Veuillez ne pas considérer:
Si vous pouvez le faire avec PHP 5.3, je recommanderais vivement Doctrine DAL , il est construit au-dessus de PDO, donc vous obtenez les mêmes performances plus une excellente API.
Mise à jour: Si Doctrine n'est pas bon, vous pouvez essayer MDB2 . Il a des pilotes pour la plupart des SGBDR populaires, une API robuste, d'excellents documents et une énorme base d'utilisateurs:
J'utilise Zend_Db pour mon application Web depuis 1 an. Je pense que Zend Framework est de loin le meilleur.
Zend a été lancé par des gens qui étaient les principaux contributeurs de PHP . (1)
largement testé
Oui. Il est utilisé par des milliers de projets et dispose d'une communauté active de développeurs.
a une bonne interface (noms de méthode lisibles, bonne stratégie de transmission de paramètres)
Oui. Tous les composants peuvent être facilement personnalisés selon vos besoins. Chaque composant de Zend est faiblement couplé, ce qui signifie que vous pouvez utiliser n'importe quel composant sans aucune dépendance à l'égard d'un autre composant du framework.
la vitesse
Oui. Zend_Db utilisant PDO, par défaut.
poids léger
Oui
fournir un cache (par exemple, s'intègre à memcache ou prend en charge un bon mécanisme de mise en cache)
Zend a un système de mise en cache étend .
licence open source
Oui
Pour accéder à une table de base de données, il vous suffit de créer une classe pour celle-ci en définissant le nom de la table et sa clé primaire comme ses champs.
class User extends Zend_Db_Table {
protected $_name = "users"; //tablename
protected $_primary = "user_key"; //primary key column
function addNewUser($name,$age,$email) {
//Validate input and add Logic to add a new user
//Methods are available to insert data like $this->insert($data)
// where $data is an array of column names and values
// Check links below for documentation
}
}
C'est ce qu'on appelle un modèle. Dans cette classe, vous pouvez créer toutes les méthodes liées à l'entité "Utilisateur" comme l'ajout d'un nouvel utilisateur, la modification d'un utilisateur, etc.
Dans votre code d'application, vous pouvez l'utiliser comme,
$u = new User();
$u->addNewUser('Name','Age','email');
Doit lire ceci - http://framework.zend.com/manual/en/zend.db.table.html
Plus de référence ici . Cochez cette question de relation pour plus d'informations
Si vous avez seulement besoin de travailler avec MySQL, DALMP Database Abstraction Layer for MySQL using PHP. peut être une option
fonctionne avec cache/memcache/redis et fait également une gestion de session très simple et légère.
J'ai eu quelques problèmes avec doctrine DBAL, principalement avec la création de schéma/base de données/table, c'était bogué et une partie de la documentation était différente des interfaces réelles et des méthodes de classe (j'ai lu right version documentation), j'ai dû utiliser des instructions SQL brutes pour certaines de ces choses.
Tout le reste semblait aller bien, c'était un petit projet donc je n'ai pas utilisé toutes les fonctionnalités doctrine DBAL fournit.
Remarque: je l'ai fait il y a environ un an avec la dernière version stable de doctrine DBAL et php, peut-être que tous ces problèmes sont résolus maintenant.
Doctrine 2.0 est la meilleure du marché car elle est supportée par les frameworks les plus performants comme le framework Zend, Symfony.
Il prend également en charge nosql db comme mangodb etc ...
Il a un système de cache intégré qui peut booster l'application.
Il prend également en charge l'extension comme la pagination, le générateur de requêtes, etc.
Voici quelques-uns des principaux résultats de la propulsion et de la doctrine
| Insert | findPk | complex| hydrate| with |
|--------|--------|--------|--------|--------|
PDOTestSuite | 132 | 149 | 112 | 107 | 109 |
Propel14TestSuite | 953 | 436 | 133 | 270 | 280 |
Propel15aLa14TestSuite | 926 | 428 | 143 | 264 | 282 |
Propel15TestSuite | 923 | 558 | 171 | 356 | 385 |
Propel15WithCacheTestSuite | 932 | 463 | 189 | 342 | 327 |
Doctrine12TestSuite | 1673 | 2661 | 449 | 1710 | 1832 |
Doctrine12WithCacheTestSuite | 1903 | 1179 | 550 | 957 | 722 |
Doctrine2TestSuite | 165 | 426 | 412 | 1048 | 1042 |
Doctrine2WithCacheTestSuite | 176 | 423 | 148 | 606 | 383 |
Ce sont les observations clés pour les résultats Doctrine 2.
voir les deux derniers enregistrements comment les performances ont augmenté avec doctrine 2.0 ...
Qu'en est-il de Zend_Db ? La seule chose que pour la mise en cache vous avez besoin de Zend_Cache, et léger est une chose vague. Je suppose que toutes les autres exigences sont identiques.