Struktúra reflexió
A Nette Database eszközöket biztosít az adatbázis struktúrájának introspekciójához a Nette\Database\Reflection osztály segítségével. Ez lehetővé teszi információk lekérését táblákról, oszlopokról, indexekről és idegen kulcsokról. A reflexiót használhatja sémák generálásához, rugalmas, adatbázissal dolgozó alkalmazások létrehozásához vagy általános adatbázis-eszközök készítéséhez.
A reflexiós objektumot az adatbázis-kapcsolat példányából kapjuk meg:
$reflection = $database->getReflection(); Táblák lekérése
A $reflection->tables readonly property tartalmazza az adatbázis összes táblájának asszociatív tömbjét:
// Az összes tábla nevének kiírása foreach ($reflection->tables as $name => $table) { echo $name . "\n"; } Két további metódus is rendelkezésre áll:
// Tábla létezésének ellenőrzése if ($reflection->hasTable('users')) { echo "A users tábla létezik"; } // Visszaadja a tábla objektumot; ha nem létezik, kivételt dob $table = $reflection->getTable('users'); Információ a tábláról
A táblát egy Table objektum reprezentálja, amely a következő readonly property-ket biztosítja:
$name: string– tábla neve$view: bool– hogy nézetről van-e szó$fullName: ?string– a tábla teljes neve, beleértve a sémát (ha létezik)$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 vagy null$foreignKeys: ForeignKey[]– a tábla idegen kulcsainak tömbje
Oszlopok
A tábla columns property-je az oszlopok asszociatív tömbjét adja meg, ahol a kulcs az oszlop neve, az érték pedig egy Column példány a következő property-kkel:
$name: string– oszlop neve$table: ?Table– referencia az oszlop táblájára$nativeType: string– natív adatbázis típus$size: ?int– a típus mérete/hossza$nullable: bool– hogy az oszlop tartalmazhat-e NULL-t$default: mixed– az oszlop alapértelmezett értéke$autoIncrement: bool– hogy az oszlop auto-increment-e$primary: bool– hogy része-e az elsődleges kulcsnak$vendor: array– további, az adott adatbázis-rendszerre specifikus metaadatok
foreach ($table->columns as $name => $column) { echo "Oszlop: $name\n"; echo "Típus: {$column->nativeType}\n"; echo "Nullable: " . ($column->nullable ? 'Igen' : 'Nem') . "\n"; } Indexek
A tábla indexes property-je az indexek tömbjét adja meg, ahol minden index egy Index példány a következő property-kkel:
$columns: Column[]– az indexet alkotó oszlopok tömbje$unique: bool– hogy az index egyedi-e$primary: bool– hogy elsődleges kulcsról van-e szó$name: ?string– az index neve
A tábla elsődleges kulcsát a primaryKey property segítségével lehet lekérni, amely vagy egy Index objektumot ad vissza, vagy null-t, ha a táblának nincs elsődleges kulcsa.
// Indexek kiírása foreach ($table->indexes as $index) { $columns = implode(', ', array_map(fn($col) => $col->name, $index->columns)); echo "Index" . ($index->name ? " {$index->name}" : '') . ":\n"; echo " Oszlopok: $columns\n"; echo " Unique: " . ($index->unique ? 'Igen' : 'Nem') . "\n"; } // Elsődleges kulcs kiírása if ($primaryKey = $table->primaryKey) { $columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns)); echo "Elsődleges kulcs: $columns\n"; } Idegen kulcsok
A tábla foreignKeys property-je az idegen kulcsok tömbjét adja meg, ahol minden idegen kulcs egy ForeignKey példány a következő property-kkel:
$foreignTable: Table– a hivatkozott tábla$localColumns: Column[]– a helyi oszlopok tömbje$foreignColumns: Column[]– a hivatkozott oszlopok tömbje$name: ?string– az idegen kulcs neve
// Idegen kulcsok kiírá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"; }