Bases de datos en Joomla
Siguiendo con nuestro último tutorial en el que vimos cómo desarrollar módulos para Joomla veremos ahora cómo trabajar con bases de datos al programar para este CMS, bien utilizando sentencias SQL, a través de la clase JDatabase, o bien mediante la clase JTable, haciendo uso de una especie de pequeño ORM (mapeo objeto-relacional) basado en el patrón active record.
JDatabase
Lo primero que debemos hacer a la hora de usar JDatabase, la clase que representa una conexión a la base de datos en Joomla, es obtener una instancia de la clase. Para ello haremos uso de JFactory, una clase que ofrece varios métodos estáticos para obtener instancias de distintos singleton del framework, como pueden ser el objeto sesión (getSession), el objeto usuario (getUser) o el propio objeto JDatabase (getDBO).
$db =& JFactory::getDBO();
Para preparar una consulta se utiliza setQuery. Algo a tener en cuenta a la hora de escribir nuestras consultas es que debemos sustituir el prefijo de las tablas de Joomla (jos_ normalmente) por #__. De esta forma el usuario podrá utilizar el prefijo que prefiera para las tablas de Joomla, ya que el framework se encargará de sustituir este prefijo por el adecuado antes de ejecutar la consulta.
$query = 'CREATE TABLE #__empleado(id INT NOT NULL AUTO_INCREMENT, nombre VARCHAR(20), departamento VARCHAR(20), PRIMARY KEY(id))';
$db->setQuery($query);
Para ejecutar la consulta se utiliza el método query()
$db =& JFactory::getDBO();
$query = 'CREATE TABLE #__empleado(id INT NOT NULL AUTO_INCREMENT, nombre VARCHAR(20), departamento VARCHAR(20), PRIMARY KEY(id))';
$db->setQuery($query);
$db->query();
Si la consulta que vamos a ejecutar es un SELECT, podemos sustituir el método query por uno de los siguientes métodos, dependiendo del tipo de resultado que necesitemos obtener:
LoadResult: un único valor
$db =& JFactory::getDBO();
$query = 'SELECT nombre FROM #__empleado LIMIT 1';
$db->setQuery($query);
$nombre = $db->loadResult();
echo $nombre;
loadResultArray: un array con los valores de las distintas tuplas para un cierto campo
$db =& JFactory::getDBO();
$query = 'SELECT nombre FROM #__empleado';
$db->setQuery($query);
$nombres = $db->loadResultArray();
foreach($nombres as $nombre)
echo $nombre, '<br/>';
loadAssoc: un array asociativo en el que las claves son los campos de la tupla
$db =& JFactory::getDBO();
$query = 'SELECT * FROM #__empleado';
$db->setQuery($query);
$empleado = $db->loadAssoc();
foreach($empleado as $campo => $valor)
echo $campo, ': ', $valor, '<br/>';
loadAssocList: una lista con un array asociativo para cada tupla
$db =& JFactory::getDBO();
$query = 'SELECT * FROM #__empleado';
$db->setQuery($query);
$empleados = $db->loadAssocList();
foreach($empleados as $empleado) {
foreach($empleado as $campo => $valor)
echo $campo, ': ', $valor, '<br/>';
echo '<hr/>';
}
No hay comentarios:
Publicar un comentario