Wie kann ich Propel-Kriterien kompilieren, um SQL zu löschen? Ich habe versucht, $ criteria-> toString(); aber das ist nicht zu erwarten. Auch habe ich versucht, ModelPeer :: doSelectStmt ($ Kriterien), aber es roh SQL zurückgegeben (erforderliche Parameter Substitution)So kompilieren Sie Propel-Kriterien nach SQL
Antwort
Ich glaube, dies ist der Weg
$rawSql = BasePeer::createSelectSql($criteria, $params);
Zunächst einmal ist, ist es wichtig zu beachten, dass Propel verwendet PDO mit vorbereiteten Anweisungen, sodass Sie keine vollständig "eingebaute" SQL-Anweisung in PHP erhalten. Die Verwendung von Criteria-> toString() ist ein guter Anfang, aber wie Peter erwähnt, wird ein Großteil der Arbeit tatsächlich von der BasePeer :: createSelectSql() -Methode erledigt.
Hier ist die vollständigste Weg (von Propel), um zu sehen, was die SQL aussehen wird (mit Platzhalter) und die Parameter, die in ersetzt wird:
$params = array(); // This will be filled with the parameters
$sql = BasePeer::createSelectSql($criteria, $params);
print "The raw SQL: " . $sql . "\n";
print "The parameters: " . print_r($params, true) . "\n";
Beachten Sie, dass Sie nur bessere Kilometerleistung erhalten kann Protokollieren der Abfragen auf Datenbankebene. Natürlich, wenn PDO konfiguriert ist (oder unterstützt), native db prepared Anweisungen zu verwenden, dann sehen Sie vielleicht immer noch Platzhalter in der db.
Ich fügte ein 'wordwrap ($ sql)' so wirklich lange sql kann auf die Seite passen. Ich habe einige Propel-Anfragen zurück in PDO umgewandelt, und das funktionierte wie ein Zauber. Danke @Hans L. –
Ich entschied mich, um zu arbeiten. Eigentlich brauchte ich die INSERT INTO ... SELECT. Ie - create SELECT Anweisung mittels Kriterien, weiter anhängen INSERT INTO und ausführen.
So fragte ich BasePeer, um rohe SQL (BasePeer :: createSelectSql) zu erstellen, dann INSERT IN voran gestellt. Da ich die Werte der Anweisung ausfüllen muss (: p1,: p2, usw.), aber Methode BasePeer :: populateStmtValues ist privat (warum?) Ich musste diese Methode an einen anderen Ort kopieren und aufrufen.
Wir hatten das gleiche Problem in letzter Zeit. Siehe http://groups.google.com/group/propel-development/browse_thread/thread/f56a5a8ee5db3b60
Jetzt ist BasePeer :: populateStmtValues () ab der Propellerversion 1.4 öffentlich. Dies ist derzeit in Entwicklung.
Noch einfacher Versuch:
print($criteria->toString()) ;
- 1. So verbinden Sie mit SQL nach Selfvalidate
- 2. So kompilieren Sie Ocaml zu nativem Code
- 3. Kompilieren Sie .so in Windows
- 4. So kompilieren Sie VB6-Code
- 5. Jasper Reports: So kompilieren Sie Unterberichte
- 6. So kompilieren Sie unsicheren Code in VS2012
- 7. So kompilieren Sie C# mit bestimmter Sprachversion
- 8. So kompilieren Sie Bibliothek für mehrere Plattformen
- 9. Finden Sie die ID nach dem Kompilieren
- 10. So bestellen Sie in SQL
- 11. So summieren oder gruppieren Sie nach Text in Sql
- 12. So gruppieren Sie nach Datum und Namen in SQL
- 13. So bestellen Sie eine SQL-Abfrage nach Links Join-Ergebnis
- 14. So importieren Sie Daten aus Excel nach SQL in C#
- 15. Oracle kompilieren view sql
- 16. So kompilieren Sie Tests mit SBT, ohne sie auszuführen
- 17. So konvertieren Sie DateTime nach VarChar
- 18. So kompilieren und verwenden Sie modifizierte Ejabberd-Quelldateien
- 19. So suchen Sie nach Ordner
- 20. So filtern Sie nach ID
- 21. Kompilieren Sie Kotlin zu JavaScript
- 22. So wählen Sie Daten nach x Daten nach y Zeilen aus SQL Server
- 23. So kompilieren Sie die verknüpfte Silverlight-Seite im Projekt
- 24. OpenGL: So kompilieren Sie glew32.dll aus der Quelldatei
- 25. So kompilieren Sie eine Sequenz von Ergebnissen mit ask pattern
- 26. So kompilieren Sie Code mit Visual Studio mit makeFile
- 27. So kompilieren Sie Python-Skript zu ausführbaren Binärdateien
- 28. Ant: So kompilieren Sie jar, das den Quellanhang enthält
- 29. So kompilieren Sie VAMP-Plugins zu iOS ARMV7
- 30. So kompilieren Sie öffentliche es6 Quellen von Ember CLI
Wie ich bereits sagte ich klar SQL erhalten möchten, nicht roh (wie „wählen Sie aus Artikel, in dem NAME =: p1“) Ich denke, Propel solche Funktion bietet .. . –
in diesem $ rawSql Ich muss Parameter ersetzen: p1,: p2, etc. Aber auf diese Weise muss ich bereits geschriebenen Code schreiben –
Dafür ist das params-Array. Ich schätze, ich habe das nicht klargestellt - versorge deine Params als assoziatives Array. –