FluentPDO est un générateur de requêtes PHP SQL utilisant PDO. Il s'agit d'une bibliothèque rapide et légère dotée d'un générateur de jointures intelligent, qui crée automatiquement des jointures de tables pour vous.
Interface simple pour créer des requêtes robustes
Prend en charge toute base de données compatible avec PDO
Possibilité de créer des requêtes SELECT, INSERT, UPDATE et DELETE complexes avec peu de code
Tapez des indices pour les méthodes magiques avec complétion de code dans les IDE intelligents
La version stable de FluentPDO et activement maintenue. Prend officiellement en charge PHP 7.3 à PHP 8.0, mais il peut fonctionner avec les versions précédentes de PHP 7.
L'ancienne version de FluentPDO. Il n'est plus pris en charge et ne sera ni maintenu ni mis à jour. Cette version fonctionne avec PHP 5.4 à 7.1.
Cette version est une réécriture complète de Fluent à partir de zéro. Son principal avantage est une utilisation nettement moindre de la mémoire et des performances bien supérieures dans la création de requêtes. Il impose également quelques restrictions supplémentaires pour rendre les requêtes plus faciles à lire et à gérer. La documentation est également une demande très courante, et la version 3 est entièrement documentée parallèlement au développement. Les détails et les mesures seront publiés une fois disponibles.
Sitepoint - Premiers pas avec FluentPDO
La méthode préférée pour installer FluentPDO est via composer.
Ajoutez la ligne suivante dans votre fichier composer.json
:
"require": { ... "envms/fluentpdo": "^2.2.0" }
mettez à jour vos dépendances avec composer update
, et le tour est joué !
Si vous préférez ne pas utiliser composer, téléchargez la dernière version, créez le répertoire Envms/FluentPDO
dans le répertoire de votre bibliothèque et déposez-y ce référentiel. Enfin, ajoutez :
require '[lib-dir]/Envms/FluentPDO/src/Query.php';
en haut de votre candidature. Remarque : Vous aurez besoin d'un chargeur automatique pour utiliser FluentPDO sans modifier son code source.
Créez une nouvelle instance PDO et transmettez-la à FluentPDO :
$pdo = new PDO('mysql:dbname=fluentdb', 'user', 'password');$fluent = new EnvmsFluentPDOQuery($pdo);
Ensuite, créer des requêtes est simple et rapide :
$query = $fluent->from('commentaire') ->où('article.published_at > ?', $date) ->orderBy('published_at DESC') ->limite(5);
ce qui construirait la requête ci-dessous :
SELECT comment.*FROM commentLEFT JOIN article ON article.id = comment.article_idWHERE article.published_at > ?ORDER BY article.published_at DESCLIMIT 5
Pour obtenir les données de la sélection, tout ce que nous faisons est de parcourir le tableau renvoyé :
foreach ($query as $row) {echo "$row['title']n"; }
Commençons par une jointure traditionnelle, ci-dessous :
$query = $fluent->from('article') ->leftJoin('utilisateur ON user.id = article.user_id') ->select('utilisateur.nom');
C'est assez verbeux et pas très intelligent. Si vos tables utilisent des noms de clés primaires et étrangères appropriés, vous pouvez raccourcir ce qui précède comme suit :
$query = $fluent->from('article') ->leftJoin('utilisateur') ->select('utilisateur.nom');
C'est mieux, mais ce n'est pas idéal. Cependant, il serait encore plus simple de ne pas écrire de jointure :
$query = $fluent->from('article') ->select('utilisateur.nom');
Génial, non ? FluentPDO est capable de créer la jointure pour vous, en ajoutant le nom de la table étrangère dans la colonne demandée.
Les trois extraits ci-dessus créeront exactement la même requête :
SELECT article.*, user.name FROM article LEFT JOIN utilisateur SUR user.id = article.user_id
Enfin, c'est toujours une bonne idée de libérer les ressources dès qu'elles ont terminé leurs tâches :
$fluent->close();
$query = $fluent->from('article')->where('id', 1)->fetch();$query = $fluent->from('user', 1)->fetch(); // version plus courte si vous sélectionnez une ligne par clé primaire
$values = array('title' => 'article 1', 'content' => 'content 1');$query = $fluent->insertInto('article')->values($values)->execute( );$query = $fluent->insertInto('article', $values)->execute(); // version plus courte
$set = array('published_at' => new FluentLiteral('NOW()'));$query = $fluent->update('article')->set($set)->where('id', 1 )->execute();$query = $fluent->update('article', $set, 1)->execute(); // version plus courte si mise à jour d'une ligne par clé primaire
$query = $fluent->deleteFrom('article')->where('id', 1)->execute();$query = $fluent->deleteFrom('article', 1)->execute(); // version plus courte si suppression d'une ligne par clé primaire
Remarque : les requêtes INSERT, UPDATE et DELETE ne s'exécuteront qu'après avoir appelé ->execute()
Gratuit pour une utilisation commerciale et non commerciale sous les licences Apache 2.0 ou GPL 2.0.