Nette Documentation Preview

syntax
Riflessi
********

.{data-version:3.2.1}
Nette Database fornisce strumenti per l'introspezione della struttura del database utilizzando la classe [api:Nette\Database\Reflection\Reflection]. Questa permette di recuperare informazioni su tabelle, colonne, indici e chiavi esterne. La riflessione può essere utilizzata per la generazione di schemi, per la creazione di applicazioni flessibili basate su database o per strumenti generali di database.

È possibile ottenere l'oggetto reflection da un'istanza di connessione al database:

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


Lavorare con le tabelle .[#toc-working-with-tables]
===================================================

Utilizzando la riflessione possiamo sfogliare tutte le tabelle del database:


getTables(): Nette\Database\Reflection\Table[] .[method]
--------------------------------------------------------
Restituisce un array associativo in cui la chiave è il nome della tabella e il valore è un array di metadati della tabella.

```php
// Elenco di tutti i nomi delle tabelle
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}
```


hasTable(string $name): bool .[method]
--------------------------------------
Restituisce `true` se la tabella esiste, altrimenti `false`.

```php
// Verifica dell'esistenza della tabella
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}
```


getTable(string $name): Nette\Database\Reflection\Table .[method]
-----------------------------------------------------------------
Restituisce l'oggetto `Nette\Database\Reflection\Table` che rappresenta la tabella indicata. Se la tabella non esiste, lancia un'eccezione `Nette\Database\Exception\MissingTableException`.

```php
// Recupero di una tabella specifica
$table = $reflection->getTable('users');
```


Informazioni sulle colonne .[#toc-information-about-columns]
============================================================

L'oggetto [api:Nette\Database\Reflection\Table], ottenuto chiamando `getTable()`, consente di recuperare informazioni dettagliate sulle colonne della tabella.


getColumns(): Nette\Database\Reflection\Column[] .[method]
----------------------------------------------------------
Restituisce un array di oggetti `Nette\Database\Reflection\Column` che rappresentano le colonne della tabella.


getColumn(string $name): Nette\Database\Reflection\Column .[method]
-------------------------------------------------------------------
Restituisce l'oggetto [api:Nette\Database\Reflection\Column] che rappresenta la colonna indicata. Se la colonna non esiste, lancia un'eccezione `Nette\Database\Exception\MissingColumnException`.

L'oggetto `Column` fornisce le seguenti proprietà:

- `name`: Il nome della colonna.
- `nativeType`: Il tipo di dati della colonna specifico del database.
- `type`: Il tipo di dati normalizzato della colonna (vedere le costanti `Nette\Utils\Type`).
- `nullable`: `true` se la colonna può contenere `NULL`, altrimenti `false`.
- `primary`: `true` se la colonna fa parte della chiave primaria, altrimenti `false`.
- `autoIncrement`: `true` se la colonna è autoincrementata, altrimenti `false`.
- `default`: Il valore predefinito della colonna o `null` se non è definito.
- `vendor`: Un array con informazioni aggiuntive specifiche del database.

```php
// Iterazione di tutte le colonne della tabella "utenti".
$table = $reflection->getTable('users');
foreach ($table->getColumns() as $column) {
	echo "Column: " . $column->name . "\n";
	echo "Type: " . $column->nativeType . "\n";
	echo "Allows NULL: " . ($column->nullable ? 'Yes': 'No') . "\n";
	echo "Default value: " . ($column->default ?? 'None') . "\n";
	echo "Is primary key: " . ($column->primary ? 'Yes': 'No') . "\n";
	echo "Is auto-increment: " . ($column->autoIncrement ? 'Yes': 'No') . "\n";
}

// Recupero di una colonna specifica
$idColumn = $table->getColumn('id');
```


Indici e chiavi primarie .[#toc-indexes-and-primary-keys]
=========================================================


getIndexes(): Nette\Database\Reflection\Index[] .[method]
---------------------------------------------------------
Restituisce un array di oggetti `Nette\Database\Reflection\Index` che rappresentano gli indici della tabella.


getIndex(string $name): Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------------
Restituisce l'oggetto [api:Nette\Database\Reflection\Index] che rappresenta l'indice dato. Se l'indice non esiste, lancia un'eccezione `Nette\Database\Exception\MissingIndexException`.


getPrimaryKey(): ?Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------
Restituisce l'oggetto `Nette\Database\Reflection\Index` che rappresenta la chiave primaria della tabella, oppure `null` se la tabella non ha una chiave primaria.

L'oggetto `Index` fornisce le seguenti proprietà:

- `name`: Il nome dell'indice.
- `columns`: Un array di oggetti `Nette\Database\Reflection\Column` che rappresentano le colonne che fanno parte dell'indice.
- `unique`: `true` se l'indice è unico, altrimenti `false`.
- `primary`: `true` se l'indice è la chiave primaria, altrimenti `false`.

```php
$table = $reflection->getTable('users');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

// Elenco di tutti gli indici
foreach ($table->getIndexes() as $index) {
	echo "Index: " . ($index->name ?? 'Unnamed') . "\n";
	echo "Columns: " . $printColumnNames($index->columns) . "\n";
	echo "Is unique: " . ($index->unique ? 'Yes': 'No') . "\n";
	echo "Is primary key: " . ($index->primary ? 'Yes': 'No') . "\n";
}

// Recupero della chiave primaria
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}
```


Chiavi straniere .[#toc-foreign-keys]
=====================================


getForeignKeys(): Nette\Database\Reflection\ForeignKey[] .[method]
------------------------------------------------------------------
Restituisce un array di oggetti `Nette\Database\Reflection\ForeignKey` che rappresentano le chiavi esterne della tabella.


getForeignKey(string $name): Nette\Database\Reflection\ForeignKey .[method]
---------------------------------------------------------------------------
Restituisce l'oggetto [api:Nette\Database\Reflection\ForeignKey] che rappresenta la chiave esterna indicata. Se la chiave esterna non esiste, viene lanciata un'eccezione `Nette\Database\Exception\MissingForeignKeyException`.

L'oggetto `ForeignKey` fornisce le seguenti proprietà:

- `name`: il nome della chiave esterna.
- `localColumns`: Un array di oggetti `Nette\Database\Reflection\Column` che rappresentano le colonne locali che compongono la chiave esterna.
- `foreignTable`: Un oggetto `Nette\Database\Reflection\Table` che rappresenta la tabella esterna a cui fa riferimento la chiave esterna.
- `foreignColumns`: Una matrice di oggetti `Nette\Database\Reflection\Column` che rappresentano le colonne esterne a cui fa riferimento la chiave esterna.

```php
$table = $reflection->getTable('books');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

foreach ($table->getForeignKeys() as $fk) {
	echo "Foreign key: " . ($fk->name ?? 'Unnamed') . "\n";
	echo "Local columns: " . $printColumnNames($fk->localColumns) . "\n";
	echo "References table: {$fk->foreignTable->name}\n";
	echo "References columns: " . $printColumnNames($fk->foreignColumns) . "\n";
}
```

Riflessi

Nette Database fornisce strumenti per l'introspezione della struttura del database utilizzando la classe Nette\Database\Reflection\Reflection. Questa permette di recuperare informazioni su tabelle, colonne, indici e chiavi esterne. La riflessione può essere utilizzata per la generazione di schemi, per la creazione di applicazioni flessibili basate su database o per strumenti generali di database.

È possibile ottenere l'oggetto reflection da un'istanza di connessione al database:

$reflection = $connection->getReflection();

Lavorare con le tabelle

Utilizzando la riflessione possiamo sfogliare tutte le tabelle del database:

getTables(): Nette\Database\Reflection\Table[]

Restituisce un array associativo in cui la chiave è il nome della tabella e il valore è un array di metadati della tabella.

// Elenco di tutti i nomi delle tabelle
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}

hasTable(string $name): bool

Restituisce true se la tabella esiste, altrimenti false.

// Verifica dell'esistenza della tabella
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}

getTable(string $name): Nette\Database\Reflection\Table

Restituisce l'oggetto Nette\Database\Reflection\Table che rappresenta la tabella indicata. Se la tabella non esiste, lancia un'eccezione Nette\Database\Exception\MissingTableException.

// Recupero di una tabella specifica
$table = $reflection->getTable('users');

Informazioni sulle colonne

L'oggetto Nette\Database\Reflection\Table, ottenuto chiamando getTable(), consente di recuperare informazioni dettagliate sulle colonne della tabella.

getColumns(): Nette\Database\Reflection\Column[]

Restituisce un array di oggetti Nette\Database\Reflection\Column che rappresentano le colonne della tabella.

getColumn(string $name): Nette\Database\Reflection\Column

Restituisce l'oggetto Nette\Database\Reflection\Column che rappresenta la colonna indicata. Se la colonna non esiste, lancia un'eccezione Nette\Database\Exception\MissingColumnException.

L'oggetto Column fornisce le seguenti proprietà:

  • name: Il nome della colonna.
  • nativeType: Il tipo di dati della colonna specifico del database.
  • type: Il tipo di dati normalizzato della colonna (vedere le costanti Nette\Utils\Type).
  • nullable: true se la colonna può contenere NULL, altrimenti false.
  • primary: true se la colonna fa parte della chiave primaria, altrimenti false.
  • autoIncrement: true se la colonna è autoincrementata, altrimenti false.
  • default: Il valore predefinito della colonna o null se non è definito.
  • vendor: Un array con informazioni aggiuntive specifiche del database.
// Iterazione di tutte le colonne della tabella "utenti".
$table = $reflection->getTable('users');
foreach ($table->getColumns() as $column) {
	echo "Column: " . $column->name . "\n";
	echo "Type: " . $column->nativeType . "\n";
	echo "Allows NULL: " . ($column->nullable ? 'Yes': 'No') . "\n";
	echo "Default value: " . ($column->default ?? 'None') . "\n";
	echo "Is primary key: " . ($column->primary ? 'Yes': 'No') . "\n";
	echo "Is auto-increment: " . ($column->autoIncrement ? 'Yes': 'No') . "\n";
}

// Recupero di una colonna specifica
$idColumn = $table->getColumn('id');

Indici e chiavi primarie

getIndexes(): Nette\Database\Reflection\Index[]

Restituisce un array di oggetti Nette\Database\Reflection\Index che rappresentano gli indici della tabella.

getIndex(string $name): Nette\Database\Reflection\Index

Restituisce l'oggetto Nette\Database\Reflection\Index che rappresenta l'indice dato. Se l'indice non esiste, lancia un'eccezione Nette\Database\Exception\MissingIndexException.

getPrimaryKey(): ?Nette\Database\Reflection\Index

Restituisce l'oggetto Nette\Database\Reflection\Index che rappresenta la chiave primaria della tabella, oppure null se la tabella non ha una chiave primaria.

L'oggetto Index fornisce le seguenti proprietà:

  • name: Il nome dell'indice.
  • columns: Un array di oggetti Nette\Database\Reflection\Column che rappresentano le colonne che fanno parte dell'indice.
  • unique: true se l'indice è unico, altrimenti false.
  • primary: true se l'indice è la chiave primaria, altrimenti false.
$table = $reflection->getTable('users');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

// Elenco di tutti gli indici
foreach ($table->getIndexes() as $index) {
	echo "Index: " . ($index->name ?? 'Unnamed') . "\n";
	echo "Columns: " . $printColumnNames($index->columns) . "\n";
	echo "Is unique: " . ($index->unique ? 'Yes': 'No') . "\n";
	echo "Is primary key: " . ($index->primary ? 'Yes': 'No') . "\n";
}

// Recupero della chiave primaria
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}

Chiavi straniere

getForeignKeys(): Nette\Database\Reflection\ForeignKey[]

Restituisce un array di oggetti Nette\Database\Reflection\ForeignKey che rappresentano le chiavi esterne della tabella.

getForeignKey(string $name): Nette\Database\Reflection\ForeignKey

Restituisce l'oggetto Nette\Database\Reflection\ForeignKey che rappresenta la chiave esterna indicata. Se la chiave esterna non esiste, viene lanciata un'eccezione Nette\Database\Exception\MissingForeignKeyException.

L'oggetto ForeignKey fornisce le seguenti proprietà:

  • name: il nome della chiave esterna.
  • localColumns: Un array di oggetti Nette\Database\Reflection\Column che rappresentano le colonne locali che compongono la chiave esterna.
  • foreignTable: Un oggetto Nette\Database\Reflection\Table che rappresenta la tabella esterna a cui fa riferimento la chiave esterna.
  • foreignColumns: Una matrice di oggetti Nette\Database\Reflection\Column che rappresentano le colonne esterne a cui fa riferimento la chiave esterna.
$table = $reflection->getTable('books');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

foreach ($table->getForeignKeys() as $fk) {
	echo "Foreign key: " . ($fk->name ?? 'Unnamed') . "\n";
	echo "Local columns: " . $printColumnNames($fk->localColumns) . "\n";
	echo "References table: {$fk->foreignTable->name}\n";
	echo "References columns: " . $printColumnNames($fk->foreignColumns) . "\n";
}