A szerkezet tükrözése
A Nette Database a Nette\Database\Reflection osztályon keresztül eszközöket biztosít az adatbázis-struktúrák vizsgálatához. Ez lehetővé teszi a táblákról, oszlopokról, indexekről és idegen kulcsokról szóló információk lekérdezését. A reflexiót használhatja sémák létrehozására, rugalmas adatbázis-alkalmazások létrehozására vagy általános adatbázis-eszközök készítésére.
A reflection objektumot egy adatbázis-kapcsolati példányból szerezheti meg:
$reflection = $database->getReflection();
Táblák lekérdezése
Az olvasható $reflection->tables
tulajdonság az adatbázisban lévő összes táblázat asszociatív
tömbjét tartalmazza:
// Az összes táblázat nevének felsorolása
foreach ($reflection->tables as $name => $table) {
echo $name . "\n";
}
Két további módszer áll rendelkezésre:
// Ellenőrizze, hogy létezik-e táblázat
if ($reflection->hasTable('users')) {
echo "The table 'users' exists.";
}
// Táblaobjektum lekérése; kivételes esetet dob, ha nem létezik.
$table = $reflection->getTable('users');
Asztali információk
A táblázatot a Table objektum képviseli, amely a következő írásvédett tulajdonságokkal rendelkezik:
$name: string
– a táblázat neve$view: bool
– az, hogy nézetről van-e szó$fullName: ?string
– a tábla teljes neve, beleértve a sémát is (ha van ilyen).$columns: array<string, Column>
– a tábla oszlopainak asszociatív tömbje$indexes: Index[]
– a tábla indexeinek tömbje.$primaryKey: ?Index
– a tábla elsődleges kulcsa vagynull
$foreignKeys: ForeignKey[]
– a tábla idegen kulcsainak tömbje.
Oszlopok
A táblázat columns
tulajdonsága oszlopok asszociatív tömbjét biztosítja, ahol a kulcs az oszlop neve, az
érték pedig a Column egy példánya a
következő tulajdonságokkal:
$name: string
– az oszlop neve$table: ?Table
– az oszlop táblájára való hivatkozás.$nativeType: string
– a natív adatbázis típusa$size: ?int
– a típus mérete/hossza.$nullable: bool
– az oszlop tartalmazhat-eNULL
$default: mixed
– az oszlop alapértelmezett értéke$autoIncrement: bool
– az oszlop automatikus inkrementálódása.$primary: bool
– az oszlop része-e az elsődleges kulcsnak.$vendor: array
– az adatbázis-rendszerre jellemző további metaadatok.
foreach ($table->columns as $name => $column) {
echo "Column: $name\n";
echo "Type: {$column->nativeType}\n";
echo "Nullable: " . ($column->nullable ? 'Yes' : 'No') . "\n";
}
Indexek
Egy táblázat indexes
tulajdonsága indexek tömbjét tartalmazza, ahol minden index az Index egy példánya a következő
tulajdonságokkal:
$columns: Column[]
– az indexet alkotó oszlopok tömbje.$unique: bool
– az index egyedi-e$primary: bool
– elsődleges kulcs-e$name: ?string
– az index neve
A tábla elsődleges kulcsa a primaryKey
tulajdonságon keresztül érhető el, amely egy Index
objektumot ad vissza, vagy a null
objektumot, ha a tábla nem rendelkezik ilyennel.
// Listázási indexek
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";
}
// Az elsődleges kulcs megjelenítése
if ($primaryKey = $table->primaryKey) {
$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
echo "Primary Key: $columns\n";
}
Idegen kulcsok
A tábla foreignKeys
tulajdonsága idegen kulcsok tömbjét tartalmazza, amelyek mindegyike a ForeignKey példányaként jelenik meg
a következő tulajdonságokkal:
$foreignTable: Table
– a hivatkozott tábla$localColumns: Column[]
– helyi oszlopok tömbje$foreignColumns: Column[]
– a hivatkozott oszlopok tömbje.$name: ?string
– az idegen kulcs neve
// Idegen kulcsok listázása
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";
}