2013-05-02 21 views
17

Come si ottiene l'istruzione SQL raw da un oggetto query in Propel? Ho bisogno di questo per scopi di debug.Propel: ottieni SQL raw dall'oggetto Query?

Per esempio: mi piacerebbe avere una funzione come in

$rawSql = new BookQuery::create()->filterById(25)->getRawSql(); 

Ha qualcosa del genere esiste?

risposta

19

Sì; sei dopo il metodo toString dalla classe Criteria genitore:

$rawSql = (new BookQuery)::create()->filterById(25)->toString(); 

Come @jakerella dice, i valori specifici che si utilizzano per il filtraggio saranno vincolati dal motore di database, piuttosto che Propel, e così vedrete la struttura della query ma non esattamente ciò che verrà eseguito. Se vuoi vederlo, allora puoi controllare i log delle query del database, se sono abilitati.

+2

così semplice ... :) – twigmac

+2

Si noti che non sarà possibile ottenere specifiche 'colonne select' nella query precedente - Propel fa che a destra prima del ritrovamento . Quindi devi vedere qualcosa del tipo: 'SELECT FROM book WHERE id =: p1; ...: p1 => 25' – jakerella

+0

@jakerella: puoi spiegarlo in una risposta? Non sono sicuro che chiarisca come fare ciò che stai suggerendo. – halfer

8

appagante accettato risposta, è possibile utilizzare il codice seguente dopo l'esecuzione di query.

\Propel::getConnection()->getLastExecutedQuery() // Returns fully qualified SQL 

Esso permette di vedere il query full (tra cui selezionare le colonne ei parametri recuperati), che è stato trasmesso a database.


UPD: (come menzionato da @bbird)

Questo comando non emetterà nulla a meno che useDebug è true:

\Propel::getConnection()->useDebug(true); 

UPD2: (se si utilizza Symfony quadro)

Una cosa più degno di nota è PropelORM + Symfony.

Se è necessario tracciare SQL è possibile utilizzare i registri. Propel ha il proprio canale monolog chiamato propel e le query completamente qualificate vengono registrate con il livello di registrazione DEBUG sul canale rilevante (propel.DEBUG).

Record di registro/interrogazione si presenta così:

[2016-10-04 17:00:46] propel.DEBUG: time: 0.000 sec | mem: 24.8 MB | connection: default | SELECT `id`, `username`, `email`, `last_login` FROM `users` WHERE `id` = 123 [] [] 
+1

Suggerimento molto promettente! Non vedo l'ora di provarlo. – twigmac

+2

Nota questo comando non genererà nulla a meno che useDebug sia vero: $ con = Propel :: getConnection(); $ Con-> useDebug (true); $ Con-> getLastExecutedQuery(); – bbird

Problemi correlati