Nette Documentation Preview

syntax
Odbicie struktury
*****************

.{data-version:3.2.1}
Nette Database zapewnia narzędzia do inspekcji struktur baz danych poprzez klasę [api:Nette\Database\Reflection]. Pozwala to na pobieranie informacji o tabelach, kolumnach, indeksach i kluczach obcych. Refleksji można używać do generowania schematów, tworzenia elastycznych aplikacji bazodanowych lub budowania ogólnych narzędzi bazodanowych.

Obiekt refleksji można uzyskać z instancji połączenia z bazą danych:

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


Pobieranie tabel .[#toc-retrieving-tables]
------------------------------------------

Właściwość readonly `$reflection->tables` udostępnia tablicę asocjacyjną wszystkich tabel w bazie danych:

```php
// Wyświetlanie nazw wszystkich tabel
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}
```

Dostępne są dwie dodatkowe metody:

```php
// Sprawdza, czy tabela istnieje
if ($reflection->hasTable('users')) {
	echo "The table 'users' exists.";
}

// Pobiera obiekt tabeli; rzuca wyjątek, jeśli nie istnieje.
$table = $reflection->getTable('users');
```


Informacje o tabeli .[#toc-table-information]
---------------------------------------------

Tabela jest reprezentowana przez obiekt [Table |api:Nette\Database\Reflection\Table], który udostępnia następujące właściwości tylko do odczytu:

- `$name: string` - nazwa tabeli
- `$view: bool` - czy jest to widok
- `$fullName: ?string` - pełna nazwa tabeli, w tym schemat (jeśli dotyczy)
- `$columns: array<string, Column>` - tablica asocjacyjna kolumn tabeli
- `$indexes: Index[]` - tablica indeksów tabeli
- `$primaryKey: ?Index` - klucz podstawowy tabeli lub `null`
- `$foreignKeys: ForeignKey[]` - tablica kluczy obcych tabeli


Kolumny .[#toc-columns]
-----------------------

Właściwość `columns` tabeli zapewnia asocjacyjną tablicę kolumn, gdzie kluczem jest nazwa kolumny, a wartością jest instancja [Column |api:Nette\Database\Reflection\Column] z następującymi właściwościami:

- `$name: string` - nazwa kolumny
- `$table: ?Table` - odniesienie do tabeli kolumny
- `$nativeType: string` - natywny typ bazy danych
- `$size: ?int` - rozmiar/długość typu
- `$nullable: bool` - czy kolumna może zawierać `NULL`
- `$default: mixed` - domyślna wartość kolumny
- `$autoIncrement: bool` - czy kolumna jest automatycznie zwiększana
- `$primary: bool` - czy kolumna jest częścią klucza głównego
- `$vendor: array` - dodatkowe metadane specyficzne dla systemu bazy danych

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


Indeksy .[#toc-indexes]
-----------------------

Właściwość `indexes` tabeli zawiera tablicę indeksów, gdzie każdy indeks jest instancją [indeksu |api:Nette\Database\Reflection\Index] o następujących właściwościach:

- `$columns: Column[]` - tablica kolumn tworzących indeks
- `$unique: bool` - czy indeks jest unikalny
- `$primary: bool` - czy jest to klucz podstawowy
- `$name: ?string` - nazwa indeksu

Dostęp do klucza głównego tabeli można uzyskać za pośrednictwem właściwości `primaryKey`, która zwraca obiekt `Index` lub `null`, jeśli tabela go nie posiada.

```php
// Wyświetlanie indeksów
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "Index" . ($index->name ? " {$index->name}": '') . ":\n";
	echo "  Columns: $columns\n";
	echo "  Unique: " . ($index->unique ? 'Yes': 'No') . "\n";
}

// Wyświetlanie klucza głównego
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Primary Key: $columns\n";
}
```


Klucze obce .[#toc-foreign-keys]
--------------------------------

Właściwość `foreignKeys` tabeli zawiera tablicę kluczy obcych, z których każdy jest reprezentowany jako instancja [ForeignKey |api:Nette\Database\Reflection\ForeignKey] o następujących właściwościach:

- `$foreignTable: Table` - tabela, do której się odwołujemy
- `$localColumns: Column[]` - tablica lokalnych kolumn
- `$foreignColumns: Column[]` - tablica odwołujących się kolumn
- `$name: ?string` - nazwa klucza obcego

```php
// Listowanie kluczy obcych
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";
}
```

Odbicie struktury

Nette Database zapewnia narzędzia do inspekcji struktur baz danych poprzez klasę Nette\Database\Reflection. Pozwala to na pobieranie informacji o tabelach, kolumnach, indeksach i kluczach obcych. Refleksji można używać do generowania schematów, tworzenia elastycznych aplikacji bazodanowych lub budowania ogólnych narzędzi bazodanowych.

Obiekt refleksji można uzyskać z instancji połączenia z bazą danych:

$reflection = $database->getReflection();

Pobieranie tabel

Właściwość readonly $reflection->tables udostępnia tablicę asocjacyjną wszystkich tabel w bazie danych:

// Wyświetlanie nazw wszystkich tabel
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}

Dostępne są dwie dodatkowe metody:

// Sprawdza, czy tabela istnieje
if ($reflection->hasTable('users')) {
	echo "The table 'users' exists.";
}

// Pobiera obiekt tabeli; rzuca wyjątek, jeśli nie istnieje.
$table = $reflection->getTable('users');

Informacje o tabeli

Tabela jest reprezentowana przez obiekt Table, który udostępnia następujące właściwości tylko do odczytu:

  • $name: string – nazwa tabeli
  • $view: bool – czy jest to widok
  • $fullName: ?string – pełna nazwa tabeli, w tym schemat (jeśli dotyczy)
  • $columns: array<string, Column> – tablica asocjacyjna kolumn tabeli
  • $indexes: Index[] – tablica indeksów tabeli
  • $primaryKey: ?Index – klucz podstawowy tabeli lub null
  • $foreignKeys: ForeignKey[] – tablica kluczy obcych tabeli

Kolumny

Właściwość columns tabeli zapewnia asocjacyjną tablicę kolumn, gdzie kluczem jest nazwa kolumny, a wartością jest instancja Column z następującymi właściwościami:

  • $name: string – nazwa kolumny
  • $table: ?Table – odniesienie do tabeli kolumny
  • $nativeType: string – natywny typ bazy danych
  • $size: ?int – rozmiar/długość typu
  • $nullable: bool – czy kolumna może zawierać NULL
  • $default: mixed – domyślna wartość kolumny
  • $autoIncrement: bool – czy kolumna jest automatycznie zwiększana
  • $primary: bool – czy kolumna jest częścią klucza głównego
  • $vendor: array – dodatkowe metadane specyficzne dla systemu bazy danych
foreach ($table->columns as $name => $column) {
	echo "Column: $name\n";
	echo "Type: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Yes' : 'No') . "\n";
}

Indeksy

Właściwość indexes tabeli zawiera tablicę indeksów, gdzie każdy indeks jest instancją indeksu o następujących właściwościach:

  • $columns: Column[] – tablica kolumn tworzących indeks
  • $unique: bool – czy indeks jest unikalny
  • $primary: bool – czy jest to klucz podstawowy
  • $name: ?string – nazwa indeksu

Dostęp do klucza głównego tabeli można uzyskać za pośrednictwem właściwości primaryKey, która zwraca obiekt Index lub null, jeśli tabela go nie posiada.

// Wyświetlanie indeksów
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "Index" . ($index->name ? " {$index->name}": '') . ":\n";
	echo "  Columns: $columns\n";
	echo "  Unique: " . ($index->unique ? 'Yes': 'No') . "\n";
}

// Wyświetlanie klucza głównego
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Primary Key: $columns\n";
}

Klucze obce

Właściwość foreignKeys tabeli zawiera tablicę kluczy obcych, z których każdy jest reprezentowany jako instancja ForeignKey o następujących właściwościach:

  • $foreignTable: Table – tabela, do której się odwołujemy
  • $localColumns: Column[] – tablica lokalnych kolumn
  • $foreignColumns: Column[] – tablica odwołujących się kolumn
  • $name: ?string – nazwa klucza obcego
// Listowanie kluczy obcych
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";
}