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";
}
verzió: 4.0