El uso de la clase JTable

From Joomla! Documentation

This page is a translated version of the page Using the JTable class and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎español • ‎français • ‎italiano • ‎中文(台灣)‎

Este tutorial es para Joomla 3.x

Introducción a JTable

La clase JTable es una implementación del patrón de diseño Active Record. Es utilizado a lo largo de Joomla! en las tareas de creación, lectura, actualización y eliminación (a) CRUD para los registros en una tabla de la base de datos.

Ya que JTable es una clase abstracta que constituye la base de todas las clases de tablas de la base de datos, algunos de los métodos mencionados serán reemplazados por el hijo de la clase, por lo que debes comprobar la documentación del hijo de la clase más información. También toma nota que a partir de Joomla! 2.5,la propiedades JTable son generados automáticamente en base al esquema de la tabla especificada, lo que significa que no es necesario declarar las variables Miembro de la clase (aunque puedes hacerlo si lo deseas).

Cada tabla física creada de la base de datos debe tener su correspondiente clase derivada de JTable para que la represente. JTable proporciona muchos métodos para hacer las manipulaciones comunes, de la tabla, mucho más simple. Por ejemplo, una de las operaciones más comunes que se necesita realizar es leer una fila de la tabla, en la memoria se le da un valor para la clave principal. Esto se puede hacer fácilmente utilizando el método de carga. La fila de la tabla luego puede ser actualizada fácilmente mediante el método save, que también realiza cualquier comprobación predefinida de validez en los campos de la tabla.

Escribir una extensión de JTable

Para usar JTable, vas a crear una extensión de la clase JTable. En este ejemplo, tenemos la tabla de la base de datos "#__recetas", con una clave principal autoincremental "id", que contiene todas nuestras recetas. La única cosa que tenemos que hacer para comenzar a utilizar JTable es crear un constructor en la clase JTable. El constructor de la clase llamará al constructor padre para obtener la tabla: todo lo que se necesita es el nombre de la tabla, el nombre de la columna de clave principal y la instancia de base de datos.

<?php

defined('_JEXEC') or die();

class TableRecipes extends JTable
{
	public function __construct($db)
	{
		parent::__construct( '#__recipes', 'id', $db );
	}
}

Si se utiliza esta clase como una parte de un componente del lado servidor llamado "Recetas", puedes poner este código en el archivo /administrator/components/com_recipes/tables/recipes.php.

Puedes utilizar esta funcionalidad tanto en plugins como en componentes. Como regla general, debes evitar escribir a la base de datos desde un módulo, con el uso de plugins/componentes para esto. Recuerda que debes utilizar constantes incorporadas cuando se enlaza a una ruta de acceso personalizada (fuera de la carpetaadministrator/{com_nameofyourcomponent}/tables).

El uso de una extensión de la clase JTable

Una vez que la clase de la tabla está en su lugar podemos utilizar en nuestro modelo la función getTable().

public function getTable($type = 'Recipes', $prefix = 'Table', $config = array())
{
	return JTable::getInstance($type, $prefix, $config);
}

Puede utilizar tus clases JTable en cualquier otra extensión de Joomla! mediante el uso de JTable::addIncludePath() en la extensión del código fuente (usa com_nameofyourcomponent en lugar de com_recipes):

JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_recipes/tables');
$row = JTable::getInstance('recipes', 'Table', array());

Observa que la versión en minúsculas del sufijo de nombre de la clase se utiliza como primer parámetro, con el prefijo 'Table' como el segundo. También, la función getInstance() miembro de JTable devuelve un JTableObject por referencia en lugar de un valor.

Nombres de Campos de la Base de Datos Reservados

Algunas de las características opcionales de JTable requieren de la existencia de campos especialmente nombrados en la tabla de la base de datos. Si necesitas esta funcionalidad adicional debe asegurarse de que estos nombres de campos están presentes en la tabla. Estos nombres de campo deben ser considerados reservados y cualquier intento de utilizarlos con fines distintos a los admitidos por JTable puede resultar en conflicto.

Nombre de campo Métodos que utilizan el nombre del campo
checked_out checkOut, checkIn, isCheckedOut
checked_out_time checkOut, checkIn, isCheckedOut
hits hit
ordering getNextOrder, reorder, move
published publish

Bloquear/desbloquear

Joomla implementa un mecanismo simple para prevenir una condición de carrera al momento de editar filas en una base de datos. Esto depende de la existencia de campos llamados "checked_out" y "checked_out_time" y si estos campos están presentes en la vista (JForm), JTable automáticamente soportará este mecanismo para que pueda ser usado en las tablas de tu extensión también.

Contador de visitas

Algunas tablas de Joomla contienen un campo llamado "hits", el cual almacena el número de veces que se ha accedido a una fila de la tabla. JTable ofrece un método simple para incrementar este campo: hit.

Ejemplo de campos de JForm con nombres reservados en la base de datos en JTable

<field	name="state"
	type="list"
	label="JSTATUS"
	description="JFIELD_PUBLISHED_DESC"
	size="1"
	default="1">
	<option value="1">JPUBLISHED</option>
	<option	value="0">JUNPUBLISHED</option>
	<option	value="2">JARCHIVED</option>
	<option	value="-2">JTRASHED</option>
</field>
<field	name="checked_out"
	type="hidden"
	filter="unset"
	/>
<field	name="checked_out_time"
	type="hidden"
	filter="unset"
	/>
<field	name="created_user_id"
	label="JGLOBAL_FIELD_CREATED_BY_LABEL"
	type="hidden"
	filter="unset"
	/>
<field	name="created_time"
	label="JGLOBAL_FIELD_CREATED_LABEL"
	type="hidden"
	filter="unset"
	/>
<field	name="modified_user_id"
	label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
	type="hidden"
	filter="unset"
	/>
<field	name="modified_time"
	label="JGLOBAL_FIELD_MODIFIED_LABEL"
	type="hidden"
	filter="unset"
	/>
<field	name="hits"
	type="text"
	id="hits"
	class="readonly"
	label="JGLOBAL_HITS"
	size="20"
	readonly="true"
	filter="unset"
	/>

Funciones útiles

  • load Método para cargar en el objeto JTable un registro por su valor de clave primaria (id) o una combinación de criterios
  • bind Método para enlazar un objeto JTable a un arreglo genérico de clave / valor, es decir, asignar los valores de la matriz al objeto JTable al coincidir las claves del array con las propiedades del objeto JTable
  • check Método para validar los datos antes de guardar el objeto
  • store Método para almacenar el objeto en la base de datos
  • save Método para proporcionar un atajo a la unión, verificación y almacenamiento de una instancia de JTable a la tabla de base de datos.

Ver también


Resumen

Cuando se extiende correctamente, JTable le ofrece todas las funciones básicas que necesita para administrar y obtener registros en una tabla de la base de datos.