Odsev strukture

Podatkovna baza Nette ponuja orodja za pregledovanje struktur podatkovne baze prek razreda Nette\Database\Reflection. Tako lahko pridobite informacije o tabelah, stolpcih, indeksih in tujih ključih. Odsev lahko uporabite za izdelavo shem, ustvarjanje prilagodljivih aplikacij za podatkovne zbirke ali izdelavo splošnih orodij za podatkovne zbirke.

Objekt refleksije lahko dobite iz primerka povezave s podatkovno bazo:

$reflection = $database->getReflection();

Pridobivanje tabel

Lastnost $reflection->tables, ki je samo za branje, zagotavlja asociativno polje vseh tabel v zbirki podatkov:

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

Na voljo sta dve dodatni metodi:

// Preverite, ali tabela obstaja
if ($reflection->hasTable('users')) {
	echo "The table 'users' exists.";
}

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

Informacije o tabeli

Tabela je predstavljena z objektom Table, ki vsebuje naslednje lastnosti, ki so samo za branje:

  • $name: string – ime tabele
  • $view: bool – ali gre za pogled
  • $fullName: ?string – polno ime tabele, vključno s shemo (če je primerno)
  • $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 zagotavlja asociativno polje stolpcev, kjer je ključ ime stolpca, vrednost pa primerek stolpca z naslednjimi lastnostmi:

  • $name: string – ime stolpca
  • $table: ?Table – sklic na tabelo stolpca
  • $nativeType: string – nativni tip zbirke podatkov
  • $size: ?int – velikost/dolžina tipa
  • $nullable: bool – ali lahko stolpec vsebuje NULL
  • $default: mixed – privzeta vrednost stolpca
  • $autoIncrement: bool – ali se stolpec samodejno povečuje
  • $primary: bool – ali je stolpec del primarnega ključa
  • $vendor: array – dodatni metapodatki, značilni za sistem zbirke podatkov
foreach ($table->columns as $name => $column) {
	echo "Column: $name\n";
	echo "Type: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Yes' : 'No') . "\n";
}

Indeksi

Lastnost indexes tabele vsebuje polje indeksov, pri čemer je vsak indeks primerek Index z naslednjimi lastnostmi:

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

Do primarnega ključa tabele lahko dostopamo prek lastnosti primaryKey, ki vrne objekt Index ali null, če ga tabela nima.

// Indeksi za uvrstitev na seznam
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";
}

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

Tuji ključi

Lastnost foreignKeys tabele vsebuje niz tujih ključev, od katerih je vsak predstavljen kot primerek ForeignKey z naslednjimi lastnostmi:

  • $foreignTable: Table – referenčna tabela
  • $localColumns: Column[] – polje lokalnih stolpcev
  • $foreignColumns: Column[] – polje referenčnih stolpcev
  • $name: ?string – ime tujega ključa
// Navajanje 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";
}
različica: 4.0