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 vagy null
  • $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-e NULL
  • $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";
}
verzió: 4.0