Jak mogę skompilować Kryteria Propel, aby wyczyścić SQL? Próbowałem $ criteria-> toString(); ale tego się nie spodziewałem. Również próbowałem ModelPeer :: doSelectStmt ($ kryteria), ale powrócił surowego sql (wymagane parametry zastępcze)Jak skompilować Kryteria Propel do SQL
Odpowiedz
Wierzę, że to jest droga
$rawSql = BasePeer::createSelectSql($criteria, $params);
Przede wszystkim ważne jest, aby pamiętać, że Propel używa PDO z przygotowanymi instrukcjami, więc nie otrzymasz w pełni "wbudowanego" polecenia SQL w PHP. Korzystanie z Criteria-> toString() jest dobrym początkiem, ale jak wspomina Peter, wiele prac jest rzeczywiście wykonywanych przez metodę BasePeer :: createSelectSql().
Oto najbardziej kompletny sposób (z Propel), aby zobaczyć, co SQL będzie wyglądać (zastępcze), a parametry, które zostaną podstawione w:
$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";
Zauważ, że można uzyskać lepszy przebieg już od logowanie zapytań na poziomie bazy danych. Oczywiście, jeśli PDO jest skonfigurowany (lub obsługuje) do korzystania z natywnych przygotowanych instrukcji db, to nadal możesz zobaczyć symbole zastępcze w db.
Dodałem 'wordwrap ($ sql)' tak naprawdę długi sql może zmieścić się na stronie. Zamieniłem kilka zapytań Propela z powrotem na PDO i działało to jak czar. Dzięki @Hans L. –
Postanowiłem pracować. Właściwie potrzebowałem INSERT INTO ... SELECT. I.e - Utwórz oświadczenie SELECT za pomocą Kryteriów, dodatkowo dołącz INSERT INTO i wykonaj.
Więc poprosiłem BasePeer, aby utworzył surowy sql (BasePeer :: createSelectSql), a następnie dodał INSERT INTO. Ponieważ potrzebuję wartości wypełnienia oświadczenia (: p1,: p2, itp.), Ale metoda BasePeer :: populateStmtValues jest prywatna (dlaczego?) Musiałem skopiować 'wklej tę metodę do innego miejsca i wywołać ją.
Ostatnio mieliśmy ten sam problem. Zobacz: http://groups.google.com/group/propel-development/browse_thread/thread/f56a5a8ee5db3b60
Teraz BasePeer :: populateStmtValues () jest publicznie dostępny od wersji 1.4 napędu. To jest obecnie w dev.
Nawet łatwiej try:
print($criteria->toString()) ;
- 1. Propel: Uzyskaj surowy SQL z obiektu zapytania?
- 2. Jak korzystać z funkcji MySQL w Propel
- 3. Propel jak wygenerować kolumny UPPERCASE
- 4. Instalowanie zachowań Propel z Kompozytorem
- 5. Aplikacja Symfony - jak dodawać pola obliczeniowe do obiektów Propel?
- 6. zapytania UNION z Propel ORM
- 7. Kryteria Grails/GORM "w"
- 8. Ignoruj określone kryteria WHERE
- 9. Jak wstawić "Wskazówkę optymalizatora" do zapytania Kryteria Hibernate API api
- 10. Hibernate Kryteria podzapytaniu
- 11. Jak mogę uzyskać dodatkowe kolumny podczas nawadniania obiektów Propel za pomocą niestandardowego kodu SQL?
- 12. Zapytanie SQL 'LIKE' z '%', gdzie kryteria wyszukiwania zawierają '%'
- 13. Jak skompilować pliki HTML do pliku CHM?
- 14. Jak mogę skompilować Ruby do JavaScript?
- 15. F # Jak skompilować ofertę kodu do zestawu
- 16. Jak skompilować kod C do Swift Framework
- 17. Jak skompilować plik C++ do WebAssembly?
- 18. Jak skompilować wyrażenie do rzeczywistego wyniku?
- 19. Propel, Dodaj alias, aby wybrać oświadczenie
- 20. Kryteria Nhibernate: "wybierz max (id) ..."
- 21. Dlaczego Propel przekształca właściwość float na ciąg?
- 22. Jak skompilować skrypt julia?
- 23. Kryteria Hibernowania dołącz jedno zapytanie do wielu
- 24. Jak uzyskać i/lub zapisać kryteria zapytania do bazy danych?
- 25. case w HQL lub kryteria
- 26. Hibernate: Kryteria ze zbiorami
- 27. Domyślne kryteria sortowania sqlalchemy?
- 28. Kryteria klucza kompilacji hibernacji Dołącz
- 29. Kryteria JPA Query odrębny
- 30. Kryteria języka zapytań JPABuilder
Jak powiedziałem wcześniej, chcę uzyskać jasną SQL, nie surowy (takich jak „wybrać z artykułem gdzie NAME =: P1”) Chyba Propel udostępnia taką funkcję .. –
w tym $ rawSql muszę podstawić parametry: p1,: p2, itp. Ale w ten sposób muszę napisać już napisany kod –
Do tego służy tablica parametrów. Sądzę, że nie wyjaśniłem tego jasno - podaj swoje parametry jako tablicę asocjacyjną. –