Je veux construire la requête ci-dessous en utilisant la classe de base de données intégrée joomla.
SELECT *
FROM table_name
ORDER BY id DESC
LIMIT 1
C'est la requête que j'ai construite jusqu'à présent.
$db =& JFactory::getDBO();
$query = $db->getQuery(true);
$query->select($db->nameQuote('*'));
$query->from($db->nameQuote(TABLE_PREFIX.'table_name'));
$db->setQuery($query);
$rows = $db->loadObjectList();
Je ne sais pas comment ajouter la limite (LIMIT 1) à la requête. Quelqu'un peut-il me dire comment procéder? Merci
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('*')
->from($db->nameQuote('#__table_name'))
->order($db->nameQuote('id').' desc');
$db->setQuery($query,0,1);
$rows = $db->loadObjectList();
La fonction $db->setQuery
Prend 3 paramètres. Le premier étant la requête, puis le début, puis la limite. Nous pouvons limiter les enregistrements comme indiqué ci-dessus.
setLimit(integer $limit, integer $offset)
Si vous voulez une seule ligne
$query->setLimit(1);
Cela devrait également fonctionner:
$query->setLimit(1);
Documentation: http://api.joomla.org/cms-3/classes/JDatabaseQueryLimitable.html
SetLimit ne fonctionne pas pour moi dans Joomla 3.4.x, alors essayez:
Dans le modèle:
protected function getListQuery()
{
// Create a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);
// Select some fields
$query->select('*');
$query->from('#__your_table');
$this->setState('list.limit', 0); // 0 = unlimited
return $query;
}
Réponse de David: https://joomla.stackexchange.com/questions/4249/model-getlistquery-fetch-all-rows-with-using-jpagination
Exécutez cela avant que le modèle appelle getItems et il chargera tous les éléments pour vous.
Quelques mises en garde à ce sujet.
Vous pouvez également le faire en dehors du modèle, donc si, par exemple, vous étiez dans votre vue. Vous pouvez effectuer les opérations suivantes:
$ model = $ this-> getModel (); $ model-> setState ('list.limit', 0);
Parfois, vous pouvez le faire trop tôt, avant que l'état du modèle ne soit rempli, ce qui entraînera la reconstruction du modèle à partir de l'état utilisateur après avoir défini la limite, remplaçant essentiellement la limite.
Pour résoudre ce problème, vous pouvez forcer le modèle à remplir d'abord son état:
$ model = $ this-> getModel (); $ model-> getState (); $ model-> setState ('list.limit', 0); La méthode populateState réelle est protégée, donc en dehors du modèle, vous ne pouvez pas l'appeler directement, mais tout appel à getState s'assurera que le populateState est appelé avant de renvoyer les paramètres actuels dans l'état.
Mise à jour: Je viens de revoir cette réponse, et je peux confirmer, les deux méthodes setLimit
& order
fonctionnent si utilisé comme ci-dessous.
$query->order($db->qn($data->sort_column_name) . ' ' . $data->sort_column_order);
$query->setLimit($length,$start);
ANCIENNE RÉPONSE
Au 08/Sept/14 Les solutions de @Dasun ou @escopecz ne fonctionnent pas pour moi sur J3.x
mais cette vieille astuce fonctionne pour moi qui est Nice,
$query->order($db->qn('id') . ' DESC LIMIT 25');
Et à propos de votre exigence spécifique de vouloir récupérer seulement 1 ligne vous pouvez utiliser:
$rows = $db->loadObject();