FluentPDO ist ein PHP-SQL-Abfrage-Builder, der PDO verwendet. Es handelt sich um eine schnelle und einfache Bibliothek mit einem intelligenten Join-Builder, der automatisch Tabellen-Joins für Sie erstellt.
Einfache Schnittstelle zum Erstellen robuster Abfragen
Unterstützt jede mit PDO kompatible Datenbank
Möglichkeit, komplexe SELECT-, INSERT-, UPDATE- und DELETE-Abfragen mit wenig Code zu erstellen
Geben Sie Hinweise für magische Methoden mit Code-Vervollständigung in intelligenten IDEs ein
Die stabile Version von FluentPDO wird aktiv gepflegt. Unterstützt offiziell PHP 7.3 bis PHP 8.0, kann aber mit früheren Versionen von PHP 7 funktionieren.
Die Legacy-Version von FluentPDO. Es wird nicht mehr unterstützt und nicht gepflegt oder aktualisiert. Diese Version funktioniert mit PHP 5.4 bis 7.1.
Diese Version ist eine völlige Neufassung von Fluent von Grund auf. Sein Hauptvorteil ist eine deutlich geringere Speichernutzung und eine viel höhere Leistung bei der Abfrageerstellung. Außerdem werden einige zusätzliche Einschränkungen eingeführt, um das Lesen und Verwalten von Abfragen zu erleichtern. Auch die Dokumentation war eine sehr häufige Anfrage, und Version 3 wird parallel zur Entwicklung vollständig dokumentiert. Details und Kennzahlen werden veröffentlicht, sobald sie verfügbar sind.
Sitepoint – Erste Schritte mit FluentPDO
Die bevorzugte Methode zur Installation von FluentPDO ist über Composer.
Fügen Sie der Datei composer.json
die folgende Zeile hinzu:
"require": { ... "envms/fluentpdo": "^2.2.0" }
Aktualisieren Sie Ihre Abhängigkeiten mit composer update
, und schon sind Sie fertig!
Wenn Sie Composer nicht verwenden möchten, laden Sie die neueste Version herunter, erstellen Sie das Verzeichnis Envms/FluentPDO
in Ihrem Bibliotheksverzeichnis und legen Sie dieses Repository darin ab. Zum Schluss fügen Sie hinzu:
require '[lib-dir]/Envms/FluentPDO/src/Query.php';
an den Anfang Ihrer Bewerbung. Hinweis: Sie benötigen einen Autoloader, um FluentPDO verwenden zu können, ohne den Quellcode zu ändern.
Erstellen Sie eine neue PDO-Instanz und übergeben Sie die Instanz an FluentPDO:
$pdo = new PDO('mysql:dbname=fluentdb', 'user', 'password');$fluent = new EnvmsFluentPDOQuery($pdo);
Dann ist das Erstellen von Abfragen schnell und einfach:
$query = $fluent->from('comment') ->where('article.published_at > ?', $date) ->orderBy('published_at DESC') ->limit(5);
was die folgende Abfrage erstellen würde:
SELECT comment.*FROM commentLEFT JOIN Article ON Article.id = comment.article_idWHERE Article.published_at > ?ORDER BY Article.published_at DESCLIMIT 5
Um Daten aus der Auswahl zu erhalten, durchlaufen wir lediglich eine Schleife durch das zurückgegebene Array:
foreach ($query as $row) {echo "$row['title']n"; }
Beginnen wir unten mit einem traditionellen Join:
$query = $fluent->from('article') ->leftJoin('user ON user.id = Article.user_id') ->select('user.name');
Das ist ziemlich ausführlich und nicht sehr klug. Wenn Ihre Tabellen korrekte Primär- und Fremdschlüsselnamen verwenden, können Sie das Obige wie folgt kürzen:
$query = $fluent->from('article') ->leftJoin('user') ->select('user.name');
Das ist besser, aber nicht ideal. Es wäre jedoch noch einfacher, keine Joins zu schreiben :
$query = $fluent->from('article') ->select('user.name');
Großartig, oder? FluentPDO kann den Join für Sie erstellen, indem Sie den Namen der Fremdtabelle der angeforderten Spalte voranstellen.
Alle drei oben genannten Snippets erstellen genau dieselbe Abfrage:
SELECT Artikel.*, Benutzername FROM Artikel LEFT JOIN user ON user.id = Article.user_id
Schließlich ist es immer eine gute Idee, Ressourcen freizugeben, sobald sie mit ihren Aufgaben fertig sind:
$fluent->close();
$query = $fluent->from('article')->where('id', 1)->fetch();$query = $fluent->from('user', 1)->fetch(); // kürzere Version, wenn eine Zeile nach Primärschlüssel ausgewählt wird
$values = array('title' => 'article 1', 'content' => 'content 1');$query = $fluent->insertInto('article')->values($values)->execute( );$query = $fluent->insertInto('article', $values)->execute(); // kürzere Version
$set = array('published_at' => new FluentLiteral('NOW()'));$query = $fluent->update('article')->set($set)->where('id', 1 )->execute();$query = $fluent->update('article', $set, 1)->execute(); // kürzere Version, wenn eine Zeile nach Primärschlüssel aktualisiert wird
$query = $fluent->deleteFrom('article')->where('id', 1)->execute();$query = $fluent->deleteFrom('article', 1)->execute(); // kürzere Version, wenn eine Zeile nach Primärschlüssel gelöscht wird
Hinweis : INSERT-, UPDATE- und DELETE-Abfragen werden erst ausgeführt, nachdem Sie ->execute()
aufgerufen haben.
Kostenlos für kommerzielle und nichtkommerzielle Nutzung unter den Lizenzen Apache 2.0 oder GPL 2.0.