Comment puis-je compiler des critères Propel pour effacer SQL? J'ai essayé $ criteria-> toString(); mais ce n'est pas ce à quoi je m'attendais. Aussi j'ai essayé ModelPeer :: doSelectStmt (critères $), mais il est revenu sql brut (substitution de paramètres requis)Comment compiler les critères Propel à SQL
Répondre
Je crois que c'est la façon dont
$rawSql = BasePeer::createSelectSql($criteria, $params);
Tout d'abord, il est important de noter que Propel utilise PDO avec des instructions préparées, donc vous n'allez pas obtenir une instruction SQL entièrement "construite" en PHP. L'utilisation de Criteria-> toString() est un bon début, mais comme Peter mentionne qu'une grande partie du travail est effectivement effectuée par la méthode BasePeer :: createSelectSql().
Voici la façon la plus complète (de Propel) pour voir ce que le SQL ressemblera (avec des espaces réservés) et les paramètres qui seront substitués dans:
$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";
Notez que vous pouvez obtenir un meilleur kilométrage de seulement consignation des requêtes au niveau de la base de données. Bien sûr, si PDO est configuré (ou prend en charge) pour utiliser des instructions préparées db natives, vous pouvez toujours voir des espaces réservés dans la base de données.
J'ai ajouté un 'wordwrap ($ sql)' de sorte que sql vraiment long peut tenir sur la page. Je convertissais certaines requêtes Propel en PDO et cela fonctionnait comme un charme. Merci @Hans L. –
J'ai décidé de contourner le problème. En fait j'avais besoin du INSERT INTO ... SELECT. I.e - créer SELECT instruction au moyen de critères, ajouter en outre INSERT IN et exécuter.
J'ai donc demandé à BasePeer de créer un SQL brut (BasePeer :: createSelectSql), puis d'ajouter INSERT INTO. Comme j'ai besoin de remplir les valeurs de l'instruction (: p1,: p2, etc), mais la méthode BasePeer :: populateStmtValues est privée (pourquoi?) J'ai dû copier 'coller cette méthode à un autre endroit et l'appeler.
Nous avons eu le même problème récemment. Voir http://groups.google.com/group/propel-development/browse_thread/thread/f56a5a8ee5db3b60
BasePeer :: populateStmtValues () est désormais public à partir de la version 1.4 de Propel. Ceci est actuellement en cours de développement.
essayer encore plus facile:
print($criteria->toString()) ;
- 1. JPQL et les critères SQL Api
- 2. Comment modéliser les différents critères?
- 3. SQL - Commande par critères multiples
- 4. Hibernate transforme SQL en critères
- 5. Critères de filtre SQL dans les critères de jointure ou clause where plus efficace
- 6. Requête Sql (jointure interne + compte + grouper par) en utilisant Propel
- 7. La casse insensible équivaut à utiliser les critères Hibernate
- 8. Expressions dans les critères d'hibernation
- 9. Compiler automatiquement les requêtes Linq
- 10. Comment faire une recherche avec plusieurs critères à partir d'une base de données avec SQL?
- 11. Comment écrire un compte SQL avec une clause group by utilisant Propel ORM dans Symfony?
- 12. requêtes de critères nhibernate
- 13. Comment compiler Python 1.0
- 14. critères d'information pour les matrices de confusion
- 15. comment compiler emacs 22.3
- 16. C# DataTable.Select() - Comment formater les critères de filtrage?
- 17. compiler les erreurs avec junit
- 18. Comment compiler Clisp 2.46?
- 19. Meilleure façon de stocker les critères Badge?
- 20. Comment interroger une sous-propriété avec les critères de NHibernate?
- 21. Critères Hibernate détachés
- 22. Que signifie _model dans symfony/propel?
- 23. opérateurs mathématiques dans les requêtes Critères
- 24. Comment compiler OpenSSL for x64?
- 25. Comment compiler mod_dontdothat sur Windows
- 26. Comment Propel détermine quelle base de données utiliser pour les outils de ligne de commande?
- 27. Comment ajouter des critères supplémentaires à ma commande de mise à jour en utilisant NHibernate?
- 28. Comment utiliser NAnt pour compiler les contrôles WPF
- 29. NHibernate API Critères, les projections et les résultats
- 30. Comment forcer MSBuild à compiler en mode 32 bits?
Comme je l'ai dit plus tôt, je veux sql clair, pas cru (par exemple «sélectionnez l'article où NAME =: p1 ») Je suppose que Propel fournit cette fonction .. –
dans ce $ rawSql je dois substituer les paramètres: p1,: p2, etc. Mais de cette façon, je dois écrire le code déjà écrit –
Voilà à quoi sert le tableau params. Je suppose que je n'ai pas précisé cela - fournissez vos paramètres en tant que tableau associatif. –