2012-03-07 13 views
9

Mi chiedevo se ci fosse un modo per echeggiare la query completa con limite e limitstart ecc. Posso echo sulla riga $ query, ma voglio vedere perché il limite non funziona e non riesco a sembrare farlo per visualizzare la query reale che è l'invio al database .. Ecco il codice:echo query completa su joomla (con limite ecc.)?

$params =& JComponentHelper::getParams('com_news'); 
$limit = $params->get('x_items', 5); 
$limitstart = JRequest::getVar('limitstart', 0); 

$query = "SELECT * FROM #__news WHERE published = 1 AND catid = ".$Itemid." ORDER BY date DESC"; 
$db->setQuery($query, $limitstart, $limit); 
$rows = $db->loadObjectList(); 

$ db-> getQuery ($ query, $ limitstart, $ limite); è solo visualizza "SELECT * FROM WHERE jos_news pubblicato = 1, catid = 8 ORDER BY Data disc", che pretende molto avere i params limite alla fine della query ..

Qualsiasi aiuto sarebbe apprezzato :)

risposta

3
var_dump($db);die; 

Effettuare ciò dopo la chiamata loadObjectList(). All'interno della variabile $db deve essere presente un attributo _sql che rappresenta l'ultima query eseguita.

20

Il JDatabaseQuery oggetto ha una funzione __toString() che emette la query in modo che si può fare:

echo $db->getQuery(); 

Oppure, se si desidera passare a una funzione si può lanciare in modo esplicito in una stringa prima:

var_dump((string)$db->getQuery()); 
+1

Questa dovrebbe essere la risposta accettata. Funziona molto bene ed è esattamente il motivo per cui è stato sviluppato (immagino). –

0

Concordato con le risposte precedenti, ma ... Nel caso in cui si stiano sviluppando componenti personalizzati, poiché spesso desidero sapere con certezza cosa viene eseguito esattamente, ecco una soluzione semplice:

Nei tuoi modelli messi:

$ db = JFactory :: getDBO(); echo $ db-> getQuery();

Dove volete sapere la query ... Non metterlo in (ad esempio) la visualizzazione, dal momento che potrebbe aver caricato un altro elenco a discesa sottoposti a esecuzione forzata nel frattempo ...

Ad esempio:

Per una vista elenco, posizionarlo prima del valore foreach ($ articoli ... nella funzione pubblica getItems() del modello. In una vista modulo/articolo posizionarlo prima del ritorno $ data/return $ item nella funzione protetta loadFormData()/getItem funzione pubblica ($ pk = null)

Spero che questo aiuti ...

0

Nelle nuove versioni di joomla, è necessario eseguire il comando __toString() sull'oggetto query.

echo $query->__toString(); 

Ottengo queste informazioni su this joomla answer.

Spero che questo aiuti