Nette Documentation Preview

syntax
Refleksija strukture
********************

.{data-version:3.2.1}
Nette Database ponuja orodja za introspekcijo strukture baze podatkov z uporabo razreda [api:Nette\Database\Reflection]. Ta omogoča pridobivanje informacij o tabelah, stolpcih, indeksih in tujih ključih. Refleksijo lahko uporabite za generiranje shem, ustvarjanje fleksibilnih aplikacij, ki delajo z bazo podatkov, ali splošnih orodij za baze podatkov.

Objekt refleksije pridobimo iz instance povezave z bazo podatkov:

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


Pridobivanje tabel
------------------

Readonly lastnost `$reflection->tables` vsebuje asociativno polje vseh tabel v bazi podatkov:

```php
// Izpis imen vseh tabel
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}
```

Na voljo sta še dve metodi:

```php
// Preverjanje obstoja tabele
if ($reflection->hasTable('users')) {
	echo "Tabela users obstaja";
}

// Vrne objekt tabele; če ne obstaja, vrže izjemo
$table = $reflection->getTable('users');
```


Informacije o tabeli
--------------------

Tabela je predstavljena z objektom [Table|api:Nette\Database\Reflection\Table], ki ponuja naslednje readonly lastnosti:

- `$name: string` – ime tabele
- `$view: bool` – ali gre za pogled (view)
- `$fullName: ?string` – polno ime tabele, vključno s shemo (če obstaja)
- `$columns: array<string, Column>` – asociativno polje stolpcev tabele
- `$indexes: Index[]` – polje indeksov tabele
- `$primaryKey: ?Index` – primarni ključ tabele ali null
- `$foreignKeys: ForeignKey[]` – polje tujih ključev tabele


Stolpci
-------

Lastnost `columns` tabele ponuja asociativno polje stolpcev, kjer je ključ ime stolpca in vrednost instanca [Column|api:Nette\Database\Reflection\Column] s temi lastnostmi:

- `$name: string` – ime stolpca
- `$table: ?Table` – referenca na tabelo stolpca
- `$nativeType: string` – nativni podatkovni tip baze podatkov
- `$size: ?int` – velikost/dolžina tipa
- `$nullable: bool` – ali lahko stolpec vsebuje NULL
- `$default: mixed` – privzeta vrednost stolpca
- `$autoIncrement: bool` – ali je stolpec auto-increment
- `$primary: bool` – ali je del primarnega ključa
- `$vendor: array` – dodatni metapodatki, specifični za dani sistem baze podatkov

```php
foreach ($table->columns as $name => $column) {
	echo "Stolpec: $name\n";
	echo "Tip: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Da' : 'Ne') . "\n";
}
```


Indeksi
-------

Lastnost `indexes` tabele ponuja polje indeksov, kjer je vsak indeks instanca [Index|api:Nette\Database\Reflection\Index] s temi lastnostmi:

- `$columns: Column[]` – polje stolpcev, ki tvorijo indeks
- `$unique: bool` – ali je indeks unikaten
- `$primary: bool` – ali gre za primarni ključ
- `$name: ?string` – ime indeksa

Primarni ključ tabele lahko pridobimo z lastnostjo `primaryKey`, ki vrne bodisi objekt `Index` ali `null` v primeru, da tabela nima primarnega ključa.

```php
// Izpis indeksov
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "Indeks" . ($index->name ? " {$index->name}" : '') . ":\n";
	echo "  Stolpci: $columns\n";
	echo "  Unique: " . ($index->unique ? 'Da' : 'Ne') . "\n";
}

// Izpis primarnega ključa
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Primarni ključ: $columns\n";
}
```


Tuji ključi
-----------

Lastnost `foreignKeys` tabele ponuja polje tujih ključev, kjer je vsak tuji ključ instanca [ForeignKey|api:Nette\Database\Reflection\ForeignKey] s temi lastnostmi:

- `$foreignTable: Table` – referencirana tabela
- `$localColumns: Column[]` – polje lokalnih stolpcev
- `$foreignColumns: Column[]` – polje referenciranih stolpcev
- `$name: ?string` – ime tujega ključa

```php
// Izpis tujih ključev
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";
}
```

Refleksija strukture

Nette Database ponuja orodja za introspekcijo strukture baze podatkov z uporabo razreda Nette\Database\Reflection. Ta omogoča pridobivanje informacij o tabelah, stolpcih, indeksih in tujih ključih. Refleksijo lahko uporabite za generiranje shem, ustvarjanje fleksibilnih aplikacij, ki delajo z bazo podatkov, ali splošnih orodij za baze podatkov.

Objekt refleksije pridobimo iz instance povezave z bazo podatkov:

$reflection = $database->getReflection();

Pridobivanje tabel

Readonly lastnost $reflection->tables vsebuje asociativno polje vseh tabel v bazi podatkov:

// Izpis imen vseh tabel
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}

Na voljo sta še dve metodi:

// Preverjanje obstoja tabele
if ($reflection->hasTable('users')) {
	echo "Tabela users obstaja";
}

// Vrne objekt tabele; če ne obstaja, vrže izjemo
$table = $reflection->getTable('users');

Informacije o tabeli

Tabela je predstavljena z objektom Table, ki ponuja naslednje readonly lastnosti:

  • $name: string – ime tabele
  • $view: bool – ali gre za pogled (view)
  • $fullName: ?string – polno ime tabele, vključno s shemo (če obstaja)
  • $columns: array<string, Column> – asociativno polje stolpcev tabele
  • $indexes: Index[] – polje indeksov tabele
  • $primaryKey: ?Index – primarni ključ tabele ali null
  • $foreignKeys: ForeignKey[] – polje tujih ključev tabele

Stolpci

Lastnost columns tabele ponuja asociativno polje stolpcev, kjer je ključ ime stolpca in vrednost instanca Column s temi lastnostmi:

  • $name: string – ime stolpca
  • $table: ?Table – referenca na tabelo stolpca
  • $nativeType: string – nativni podatkovni tip baze podatkov
  • $size: ?int – velikost/dolžina tipa
  • $nullable: bool – ali lahko stolpec vsebuje NULL
  • $default: mixed – privzeta vrednost stolpca
  • $autoIncrement: bool – ali je stolpec auto-increment
  • $primary: bool – ali je del primarnega ključa
  • $vendor: array – dodatni metapodatki, specifični za dani sistem baze podatkov
foreach ($table->columns as $name => $column) {
	echo "Stolpec: $name\n";
	echo "Tip: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Da' : 'Ne') . "\n";
}

Indeksi

Lastnost indexes tabele ponuja polje indeksov, kjer je vsak indeks instanca Index s temi lastnostmi:

  • $columns: Column[] – polje stolpcev, ki tvorijo indeks
  • $unique: bool – ali je indeks unikaten
  • $primary: bool – ali gre za primarni ključ
  • $name: ?string – ime indeksa

Primarni ključ tabele lahko pridobimo z lastnostjo primaryKey, ki vrne bodisi objekt Index ali null v primeru, da tabela nima primarnega ključa.

// Izpis indeksov
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "Indeks" . ($index->name ? " {$index->name}" : '') . ":\n";
	echo "  Stolpci: $columns\n";
	echo "  Unique: " . ($index->unique ? 'Da' : 'Ne') . "\n";
}

// Izpis primarnega ključa
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Primarni ključ: $columns\n";
}

Tuji ključi

Lastnost foreignKeys tabele ponuja polje tujih ključev, kjer je vsak tuji ključ instanca ForeignKey s temi lastnostmi:

  • $foreignTable: Table – referencirana tabela
  • $localColumns: Column[] – polje lokalnih stolpcev
  • $foreignColumns: Column[] – polje referenciranih stolpcev
  • $name: ?string – ime tujega ključa
// Izpis tujih ključev
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";
}