Utilizzare la Classe 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 • ‎中文(台灣)‎

Questo Tutorial è per Joomla 3.x

Introduzione a JTable La classe JTable è un'implementazione del modello di progettazione Active Record. È utilizzato in tutto Joomla! per creare, leggere, aggiornare ed eliminare attività CRUD per i record nella tabella del database.

Poiché JTable è una classe astratta che costituisce la base per tutte le classi di tabelle di database, alcuni dei metodi elencati verranno sovrascritti dalla classe figlia, quindi dovresti controllare la documentazione della classe figlia per ulteriori informazioni. Inoltre, tieni presente che a partire da Joomla! 2.5, le proprietà JTable vengono generate automaticamente in base allo schema della tabella specificata, il che significa che non è necessario dichiarare le variabili membro nella classe (sebbene sia possibile farlo se lo si desidera).

Ogni tabella di database fisica creata dovrebbe avere una classe corrispondente derivata da JTable per rappresentarla. JTable fornisce molti metodi per rendere le manipolazioni comuni alla tabella molto più semplici. Ad esempio, una delle operazioni più comuni che dovrai eseguire è leggere una riga di tabella in memoria dato un valore per la chiave primaria. Questo può essere fatto facilmente usando il metodo di caricamento. La riga della tabella può quindi essere aggiornata altrettanto facilmente utilizzando il metodo save, che esegue anche eventuali controlli di integrità predefiniti sui campi della tabella.

Scrivere un'estensione di JTable

Per usare JTable, creerai un'estensione della classe JTable. In questo esempio, abbiamo una tabella di database "#__recipes" con una chiave primaria "id" autoincrementale contenente tutte le nostre ricette. L'unica cosa che dobbiamo fare per iniziare a usare JTable è creare un costruttore nella nostra classe JTable estesa. Il costruttore della classe chiamerà il costruttore genitore per ottenere la tabella: tutto ciò di cui ha bisogno è il nome della tabella, il nome della colonna della chiave primaria e l'istanza del database.

<?php

defined('_JEXEC') or die();

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

Se stavi utilizzando questa classe come parte di un componente di backend chiamato "Ricette", inseriresti questo codice nel file /administrator/components/com_recipes/tables/recipes.php.

Puoi utilizzare questa funzionalità nei plugin proprio come nei componenti. Come regola generale, dovresti evitare di scrivere nel database da un modulo e utilizzare plugin/componenti per questo. Ricorda di usare le constants integrate quando ti colleghi a un percorso personalizzato (al di fuori della cartella adminstrator/{com_nameofyourcomponent}/tables).

Utilizzo di un'estensione di classe JTable

Una volta che la classe della tabella è a posto, possiamo usarla nel nostro modello di funzione getTable().

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

Puoi usare le tue classi JTable in qualsiasi altro Joomla! estensione utilizzando JTable::addIncludePath() nel codice sorgente della tua estensione (usa com_nameofyourcomponent al posto di com_recipes):

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

Nota che la versione minuscola del suffisso del nome della tua classe viene utilizzata come primo parametro, con il prefisso "Tabel" come secondo. Inoltre, la funzione membro getInstance() di JTable restituisce un JTableObject per riferimento invece di un valore;.

Nomi dei campi del database riservati

Alcune delle funzionalità opzionali di JTable richiedono l'esistenza di campi con nomi speciali nella tabella del database. Se hai bisogno di questa funzionalità aggiuntiva dovresti assicurarti che questi campi con nome siano presenti nella tabella. Questi nomi di campo devono essere considerati riservati poiché qualsiasi tentativo di utilizzarli per scopi diversi da quelli supportati da JTable potrebbe causare conflitti.

Nome del campo Metodi che utilizzano il nome del campo
checked_out checkOut, checkIn, isCheckedOut
checked_out_time checkOut, checkIn, isCheckedOut
hits hit
ordering getNextOrder, reorder, move
published publish

Check-in/check-out

In Joomla! le tabelle implementano un semplice meccanismo per prevenire una race condition durante la modifica delle righe in un database. Questo dipende dall'esistenza di campi del database chiamati "checked_out" e "checked_out_time" e se questi campi sono presenti nella vista (JForm) JTable supporterà automaticamente questo meccanismo in modo che possa essere facilmente utilizzato nelle tue Tabelle.

Contatore colpi

Alcune tabelle di Joomla contengono un campo chiamato "hit" che registra il numero di volte in cui è stato effettuato l'accesso a una riga della tabella. JTable fornisce un metodo semplice per incrementare questo campo: hit.

Campi JForm di esempio per i nomi di database riservati in 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"
	/>

Funzioni utili per i membri

  • load Metodo per caricare nell'oggetto JTable un record tramite il suo valore di chiave primaria (id) o una combinazione di criteri
  • bind Metodo per associare un oggetto JTable a un array chiave/valore generico, ovvero assegnare i valori dall'array all'oggetto JTable facendo corrispondere le chiavi dell'array con le proprietà dell'oggetto JTable
  • check Metodo per convalidare i dati prima di memorizzare l'oggetto
  • store Metodo per rendere persistente l'oggetto nel database
  • save Metodo per fornire una scorciatoia per l'associazione, il controllo e l'archiviazione di un'istanza JTable nella tabella del database.

Vedi anche


Summary

Se correttamente esteso, JTable ti offre tutte le funzioni di base necessarie per gestire e recuperare i record in una tabella di database.