Nette Documentation Preview

syntax
Riflessione della struttura
***************************

.{data-version:3.2.1}
Nette Database fornisce strumenti per l'introspezione della struttura del database utilizzando la classe [api: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:

```php
$reflection = $database->getReflection();
```


Ottenere le tabelle
-------------------

La proprietà readonly `$reflection->tables` contiene un array associativo di tutte le tabelle nel database:

```php
// Elenca i nomi di tutte le tabelle
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}
```

Sono disponibili anche due metodi:

```php
// Verifica l'esistenza della tabella
if ($reflection->hasTable('users')) {
	echo "La tabella users esiste";
}

// Restituisce l'oggetto tabella; se non esiste, lancia un'eccezione
$table = $reflection->getTable('users');
```


Informazioni sulla tabella
--------------------------

La tabella è rappresentata dall'oggetto [Table|api:Nette\Database\Reflection\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|api:Nette\Database\Reflection\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

```php
foreach ($table->columns as $name => $column) {
	echo "Colonna: $name\n";
	echo "Tipo: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Sì' : 'No') . "\n";
}
```


Indici
------

La proprietà `indexes` della tabella fornisce un array di indici, dove ogni indice è un'istanza di [Index|api:Nette\Database\Reflection\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.

```php
// Elenco degli indici
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "Indice" . ($index->name ? " {$index->name}" : '') . ":\n";
	echo "  Colonne: $columns\n";
	echo "  Unique: " . ($index->unique ? 'Sì' : 'No') . "\n";
}

// Elenco della chiave primaria
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Chiave primaria: $columns\n";
}
```


Chiavi esterne
--------------

La proprietà `foreignKeys` della tabella fornisce un array di chiavi esterne, dove ogni chiave esterna è un'istanza di [ForeignKey|api:Nette\Database\Reflection\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

```php
// Elenco delle chiavi esterne
foreach ($table->foreignKeys as $fk) {
	$localCols = implode(', ', array_map(fn($col) => $col->name, $fk->localColumns));
	$foreignCols = implode(', ', array_map(fn($col) => $col->name, $fk->foreignColumns));

	echo "FK" . ($fk->name ? " {$fk->name}" : '') . ":\n";
	echo "  $localCols -> {$fk->foreignTable->name}($foreignCols)\n";
}
```

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:

$reflection = $database->getReflection();

Ottenere le tabelle

La proprietà readonly $reflection->tables contiene un array associativo di tutte le tabelle nel database:

// Elenca i nomi di tutte le tabelle
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}

Sono disponibili anche due metodi:

// Verifica l'esistenza della tabella
if ($reflection->hasTable('users')) {
	echo "La tabella users esiste";
}

// Restituisce l'oggetto tabella; se non esiste, lancia un'eccezione
$table = $reflection->getTable('users');

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
foreach ($table->columns as $name => $column) {
	echo "Colonna: $name\n";
	echo "Tipo: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Sì' : 'No') . "\n";
}

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.

// Elenco degli indici
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "Indice" . ($index->name ? " {$index->name}" : '') . ":\n";
	echo "  Colonne: $columns\n";
	echo "  Unique: " . ($index->unique ? 'Sì' : 'No') . "\n";
}

// Elenco della chiave primaria
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Chiave primaria: $columns\n";
}

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
// Elenco delle chiavi esterne
foreach ($table->foreignKeys as $fk) {
	$localCols = implode(', ', array_map(fn($col) => $col->name, $fk->localColumns));
	$foreignCols = implode(', ', array_map(fn($col) => $col->name, $fk->foreignColumns));

	echo "FK" . ($fk->name ? " {$fk->name}" : '') . ":\n";
	echo "  $localCols -> {$fk->foreignTable->name}($foreignCols)\n";
}