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 alinull
$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 vsebujeNULL
$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";
}