Riflessione della struttura
Nette Database fornisce strumenti per l'introspezione della struttura del database utilizzando la classe Nette\Database\Reflection. Ciò consente di ottenere informazioni su tabelle, colonne, indici e chiavi esterne. È possibile utilizzare la riflessione per generare schemi, creare applicazioni flessibili che lavorano con il database o strumenti di database generici.
Otteniamo l'oggetto di riflessione dall'istanza della connessione al database:
Ottenere le tabelle
La proprietà readonly $reflection->tables
contiene un array associativo di tutte le tabelle nel database:
Sono disponibili anche due metodi:
Informazioni sulla tabella
La tabella è rappresentata dall'oggetto Table, che fornisce le seguenti proprietà readonly:
$name: string
– nome della tabella$view: bool
– se si tratta di una vista$fullName: ?string
– nome completo della tabella incluso lo schema (se esiste)$columns: array<string, Column>
– array associativo delle colonne della tabella$indexes: Index[]
– array degli indici della tabella$primaryKey: ?Index
– chiave primaria della tabella o null$foreignKeys: ForeignKey[]
– array delle chiavi esterne della tabella
Colonne
La proprietà columns
della tabella fornisce un array associativo di colonne, dove la chiave è il nome della
colonna e il valore è un'istanza di Column
con queste proprietà:
$name: string
– nome della colonna$table: ?Table
– riferimento alla tabella della colonna$nativeType: string
– tipo di dato nativo del database$size: ?int
– dimensione/lunghezza del tipo$nullable: bool
– se la colonna può contenere NULL$default: mixed
– valore predefinito della colonna$autoIncrement: bool
– se la colonna è auto-increment$primary: bool
– se fa parte della chiave primaria$vendor: array
– metadati aggiuntivi specifici per il sistema di database dato
Indici
La proprietà indexes
della tabella fornisce un array di indici, dove ogni indice è un'istanza di Index con queste proprietà:
$columns: Column[]
– array di colonne che compongono l'indice$unique: bool
– se l'indice è univoco$primary: bool
– se è una chiave primaria$name: ?string
– nome dell'indice
La chiave primaria della tabella può essere ottenuta utilizzando la proprietà primaryKey
, che restituisce un
oggetto Index
o null
nel caso in cui la tabella non abbia una chiave primaria.
Chiavi esterne
La proprietà foreignKeys
della tabella fornisce un array di chiavi esterne, dove ogni chiave esterna è
un'istanza di ForeignKey con queste
proprietà:
$foreignTable: Table
– tabella referenziata$localColumns: Column[]
– array di colonne locali$foreignColumns: Column[]
– array di colonne referenziate$name: ?string
– nome della chiave esterna