Nette Documentation Preview

syntax
Reflexe
*******

.{data-version:3.2.1}
Nette Database oferă instrumente pentru introspecția structurii bazei de date utilizând clasa [api:Nette\Database\Reflection\Reflection]. Aceasta vă permite să obțineți informații despre tabele, coloane, indexuri și chei străine. Reflection poate fi utilizat pentru generarea de scheme, crearea de aplicații flexibile bazate pe baze de date sau instrumente generale pentru baze de date.

Puteți obține obiectul reflection de la o instanță de conexiune la baza de date:

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


Lucrul cu tabelele .[#toc-working-with-tables]
==============================================

Folosind reflection putem parcurge toate tabelele din baza de date:


getTables(): Nette\Database\Reflection\Table[] .[method]
--------------------------------------------------------
Returnează un array asociativ în care cheia este numele tabelului, iar valoarea este un array de metadate ale tabelului.

```php
// Listarea numelor tuturor tabelelor
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}
```


hasTable(string $name): bool .[method]
--------------------------------------
Returnează `true` dacă tabelul există, altfel `false`.

```php
// Verificarea existenței tabelelor
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}
```


getTable(string $name): Nette\Database\Reflection\Table .[method]
-----------------------------------------------------------------
Returnează obiectul `Nette\Database\Reflection\Table` care reprezintă tabelul dat. Dacă tabelul nu există, se aruncă o excepție `Nette\Database\Exception\MissingTableException`.

```php
// Recuperarea unui anumit tabel
$table = $reflection->getTable('users');
```


Informații despre coloane .[#toc-information-about-columns]
===========================================================

Obiectul [api:Nette\Database\Reflection\Table], obținut prin apelarea `getTable()`, vă permite să obțineți informații detaliate despre coloanele tabelului.


getColumns(): Nette\Database\Reflection\Column[] .[method]
----------------------------------------------------------
Returnează o matrice de obiecte `Nette\Database\Reflection\Column` reprezentând coloanele tabelului.


getColumn(string $name): Nette\Database\Reflection\Column .[method]
-------------------------------------------------------------------
Returnează obiectul [api:Nette\Database\Reflection\Column] care reprezintă coloana dată. Dacă coloana nu există, se aruncă o excepție `Nette\Database\Exception\MissingColumnException`.

Obiectul `Column` oferă următoarele proprietăți:

- `name`: Numele coloanei.
- `nativeType`: Tipul de date al coloanei specific bazei de date.
- `type`: Tipul de date normalizat al coloanei (a se vedea constantele `Nette\Utils\Type`).
- `nullable`: `true` dacă coloana poate conține `NULL`, altfel `false`.
- `primary`: `true` dacă coloana face parte din cheia primară, altfel `false`.
- `autoIncrement`: `true` dacă coloana este auto-increment, altfel `false`.
- `default`: Valoarea implicită a coloanei sau `null` dacă nu este definită.
- `vendor`: Un array cu informații suplimentare specifice bazei de date.

```php
// Iterarea prin toate coloanele din tabelul "users
$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";
}

// Recuperarea unei anumite coloane
$idColumn = $table->getColumn('id');
```


Indicii și cheile primare .[#toc-indexes-and-primary-keys]
==========================================================


getIndexes(): Nette\Database\Reflection\Index[] .[method]
---------------------------------------------------------
Returnează o matrice de obiecte `Nette\Database\Reflection\Index` care reprezintă indexurile de tabel.


getIndex(string $name): Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------------
Returnează obiectul [api:Nette\Database\Reflection\Index] care reprezintă indexul dat. Dacă indexul nu există, se aruncă o excepție `Nette\Database\Exception\MissingIndexException`.


getPrimaryKey(): ?Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------
Returnează obiectul `Nette\Database\Reflection\Index` care reprezintă cheia primară a tabelului sau `null` dacă tabelul nu are cheie primară.

Obiectul `Index` oferă următoarele proprietăți:

- `name`: Numele indexului.
- `columns`: O matrice de obiecte `Nette\Database\Reflection\Column` reprezentând coloanele care fac parte din index.
- `unique`: `true` dacă indexul este unic, altfel `false`.
- `primary`: `true` dacă indexul este cheia primară, altfel `false`.

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

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

// Listarea tuturor indexurilor
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";
}

// Recuperarea cheii primare
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}
```


Chei străine .[#toc-foreign-keys]
=================================


getForeignKeys(): Nette\Database\Reflection\ForeignKey[] .[method]
------------------------------------------------------------------
Returnează o matrice de obiecte `Nette\Database\Reflection\ForeignKey` reprezentând cheile străine ale tabelului.


getForeignKey(string $name): Nette\Database\Reflection\ForeignKey .[method]
---------------------------------------------------------------------------
Returnează obiectul [api:Nette\Database\Reflection\ForeignKey] care reprezintă cheia externă dată. Dacă cheia străină nu există, se aruncă o excepție `Nette\Database\Exception\MissingForeignKeyException`.

Obiectul `ForeignKey` oferă următoarele proprietăți:

- `name`: Numele cheii străine.
- `localColumns`: O matrice de obiecte `Nette\Database\Reflection\Column` care reprezintă coloanele locale care alcătuiesc cheia străină.
- `foreignTable`: Un obiect `Nette\Database\Reflection\Table` care reprezintă tabelul străin la care face trimitere cheia străină.
- `foreignColumns`: O matrice de obiecte `Nette\Database\Reflection\Column` reprezentând coloanele străine la care face trimitere cheia străină.

```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";
}
```

Reflexe

Nette Database oferă instrumente pentru introspecția structurii bazei de date utilizând clasa Nette\Database\Reflection\Reflection. Aceasta vă permite să obțineți informații despre tabele, coloane, indexuri și chei străine. Reflection poate fi utilizat pentru generarea de scheme, crearea de aplicații flexibile bazate pe baze de date sau instrumente generale pentru baze de date.

Puteți obține obiectul reflection de la o instanță de conexiune la baza de date:

$reflection = $connection->getReflection();

Lucrul cu tabelele

Folosind reflection putem parcurge toate tabelele din baza de date:

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

Returnează un array asociativ în care cheia este numele tabelului, iar valoarea este un array de metadate ale tabelului.

// Listarea numelor tuturor tabelelor
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}

hasTable(string $name): bool

Returnează true dacă tabelul există, altfel false.

// Verificarea existenței tabelelor
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}

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

Returnează obiectul Nette\Database\Reflection\Table care reprezintă tabelul dat. Dacă tabelul nu există, se aruncă o excepție Nette\Database\Exception\MissingTableException.

// Recuperarea unui anumit tabel
$table = $reflection->getTable('users');

Informații despre coloane

Obiectul Nette\Database\Reflection\Table, obținut prin apelarea getTable(), vă permite să obțineți informații detaliate despre coloanele tabelului.

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

Returnează o matrice de obiecte Nette\Database\Reflection\Column reprezentând coloanele tabelului.

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

Returnează obiectul Nette\Database\Reflection\Column care reprezintă coloana dată. Dacă coloana nu există, se aruncă o excepție Nette\Database\Exception\MissingColumnException.

Obiectul Column oferă următoarele proprietăți:

  • name: Numele coloanei.
  • nativeType: Tipul de date al coloanei specific bazei de date.
  • type: Tipul de date normalizat al coloanei (a se vedea constantele Nette\Utils\Type).
  • nullable: true dacă coloana poate conține NULL, altfel false.
  • primary: true dacă coloana face parte din cheia primară, altfel false.
  • autoIncrement: true dacă coloana este auto-increment, altfel false.
  • default: Valoarea implicită a coloanei sau null dacă nu este definită.
  • vendor: Un array cu informații suplimentare specifice bazei de date.
// Iterarea prin toate coloanele din tabelul "users
$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";
}

// Recuperarea unei anumite coloane
$idColumn = $table->getColumn('id');

Indicii și cheile primare

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

Returnează o matrice de obiecte Nette\Database\Reflection\Index care reprezintă indexurile de tabel.

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

Returnează obiectul Nette\Database\Reflection\Index care reprezintă indexul dat. Dacă indexul nu există, se aruncă o excepție Nette\Database\Exception\MissingIndexException.

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

Returnează obiectul Nette\Database\Reflection\Index care reprezintă cheia primară a tabelului sau null dacă tabelul nu are cheie primară.

Obiectul Index oferă următoarele proprietăți:

  • name: Numele indexului.
  • columns: O matrice de obiecte Nette\Database\Reflection\Column reprezentând coloanele care fac parte din index.
  • unique: true dacă indexul este unic, altfel false.
  • primary: true dacă indexul este cheia primară, altfel false.
$table = $reflection->getTable('users');

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

// Listarea tuturor indexurilor
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";
}

// Recuperarea cheii primare
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}

Chei străine

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

Returnează o matrice de obiecte Nette\Database\Reflection\ForeignKey reprezentând cheile străine ale tabelului.

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

Returnează obiectul Nette\Database\Reflection\ForeignKey care reprezintă cheia externă dată. Dacă cheia străină nu există, se aruncă o excepție Nette\Database\Exception\MissingForeignKeyException.

Obiectul ForeignKey oferă următoarele proprietăți:

  • name: Numele cheii străine.
  • localColumns: O matrice de obiecte Nette\Database\Reflection\Column care reprezintă coloanele locale care alcătuiesc cheia străină.
  • foreignTable: Un obiect Nette\Database\Reflection\Table care reprezintă tabelul străin la care face trimitere cheia străină.
  • foreignColumns: O matrice de obiecte Nette\Database\Reflection\Column reprezentând coloanele străine la care face trimitere cheia străină.
$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";
}