Yapı Yansıması

Nette Database, Nette\Database\Reflection sınıfını kullanarak veritabanı yapısının iç gözlemi için araçlar sağlar. Bu, tablolar, sütunlar, indeksler ve yabancı anahtarlar hakkında bilgi almanızı sağlar. Yansımayı şemalar oluşturmak, veritabanıyla çalışan esnek uygulamalar oluşturmak veya genel veritabanı araçları oluşturmak için kullanabilirsiniz.

Yansıma nesnesini veritabanı bağlantı örneğinden alırız:

$reflection = $database->getReflection();

Tabloları Alma

Salt okunur $reflection->tables özelliği, veritabanındaki tüm tabloların ilişkisel bir dizisini içerir:

// Tüm tablo adlarının çıktısı
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}

Ayrıca iki metot daha mevcuttur:

// Tablonun varlığını kontrol etme
if ($reflection->hasTable('users')) {
	echo "users tablosu mevcut";
}

// Tablo nesnesini döndürür; mevcut değilse istisna fırlatır
$table = $reflection->getTable('users');

Tablo Bilgileri

Tablo, aşağıdaki salt okunur özellikleri sağlayan bir Table nesnesiyle temsil edilir:

  • $name: string – tablo adı
  • $view: bool – bir görünüm olup olmadığı
  • $fullName: ?string – şema dahil tam tablo adı (varsa)
  • $columns: array<string, Column> – tablo sütunlarının ilişkisel dizisi
  • $indexes: Index[] – tablo indeksleri dizisi
  • $primaryKey: ?Index – tablonun birincil anahtarı veya null
  • $foreignKeys: ForeignKey[] – tablonun yabancı anahtarları dizisi

Sütunlar

Tablonun columns özelliği, anahtarın sütun adı ve değerin aşağıdaki özelliklere sahip bir Column örneği olduğu ilişkisel bir sütun dizisi sağlar:

  • $name: string – sütun adı
  • $table: ?Table – sütunun tablosuna referans
  • $nativeType: string – yerel veritabanı tipi
  • $size: ?int – tipin boyutu/uzunluğu
  • $nullable: bool – sütunun NULL içerip içeremeyeceği
  • $default: mixed – sütunun varsayılan değeri
  • $autoIncrement: bool – sütunun otomatik artan olup olmadığı
  • $primary: bool – birincil anahtarın bir parçası olup olmadığı
  • $vendor: array – belirli veritabanı sistemine özgü ek meta veri
foreach ($table->columns as $name => $column) {
	echo "Sütun: $name\n";
	echo "Tip: {$column->nativeType}\n";
	echo "Null olabilir: " . ($column->nullable ? 'Evet' : 'Hayır') . "\n";
}

İndeksler

Tablonun indexes özelliği, her indeksin aşağıdaki özelliklere sahip bir Index örneği olduğu bir indeks dizisi sağlar:

  • $columns: Column[] – indeksi oluşturan sütunlar dizisi
  • $unique: bool – indeksin benzersiz olup olmadığı
  • $primary: bool – birincil anahtar olup olmadığı
  • $name: ?string – indeks adı

Tablonun birincil anahtarı, ya bir Index nesnesi ya da tablonun birincil anahtarı olmaması durumunda null döndüren primaryKey özelliği kullanılarak elde edilebilir.

// İndekslerin çıktısı
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "İndeks" . ($index->name ? " {$index->name}" : '') . ":\n";
	echo "  Sütunlar: $columns\n";
	echo "  Benzersiz: " . ($index->unique ? 'Evet' : 'Hayır') . "\n";
}

// Birincil anahtarın çıktısı
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Birincil anahtar: $columns\n";
}

Yabancı Anahtarlar

Tablonun foreignKeys özelliği, her yabancı anahtarın aşağıdaki özelliklere sahip bir ForeignKey örneği olduğu bir yabancı anahtar dizisi sağlar:

  • $foreignTable: Table – başvurulan tablo
  • $localColumns: Column[] – yerel sütunlar dizisi
  • $foreignColumns: Column[] – başvurulan sütunlar dizisi
  • $name: ?string – yabancı anahtar adı
// Yabancı anahtarların çıktısı
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";
}
versiyon: 4.0