2012-03-07 18 views
9

Me preguntaba si había una manera de hacer eco de la consulta completa con limit y limitstart, etc. Puedo hacer eco de la línea $ query, pero quiero ver por qué el límite no está funcionando y parece que no puedo conseguir que se muestre la consulta real que se está enviando a la base de datos .. Aquí está el código:echo full joomla query (with limit etc)?

$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 ($ consulta, $ limitstart, $ límite); Sólo está mostrando "SELECT * FROM jos_news DONDE publicada = 1 y catid = 8 ORDER BY fecha DESC", que Anunciaron los parametros límite en el final de la consulta ..

Cualquier ayuda se agradece :)

Respuesta

3
var_dump($db);die; 

Haga eso después de la llamada loadObjectList(). Dentro de la variable $db debe haber un atributo _sql que es la última consulta ejecutada.

objeto
20

El JDatabaseQuery tiene una función __toString() que da salida a la consulta por lo que puede hacer:

echo $db->getQuery(); 

O si quieres pasarlo a una función que puede convertir explícitamente en una cadena en primer lugar:

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

Esta debería ser la respuesta aceptada. Funciona muy bien y es exactamente por eso que fue desarrollado (me imagino). –

0

estuvo de acuerdo con las respuestas anteriores, pero ... En caso de que usted está desarrollando sus propios componentes, ya que a menudo quieren saber con certeza lo que se ejecuta exactamente también, he aquí una solución sencilla:

En sus modelos ponga:

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

Dónde quiere saber la consulta ... No lo ponga en (por ejemplo) su punto de vista, ya que podría haber cargado alguna otra lista desplegable a través de la ejecución en el ínterin ...

Por ejemplo:

Para una vista de lista, colóquelo justo antes del foreach ($ artículos ... en la función pública getItems() del modelo. En una vista de formulario/elemento, colóquelo justo antes de la devolución $ data/return $ item en la función protegida loadFormData()/public function getItem ($ pk = null)

Espero que esto ayude ...

0

En las versiones nuevas de joomla, debe repetir __toString() en el objeto de consulta.

echo $query->__toString(); 

Obtengo esta información en this joomla answer.

Espero que esto ayude