Yapının Yansıması

Nette Database, Nette\Database\Reflection sınıfı aracılığıyla veritabanı yapılarını incelemek için araçlar sağlar. Bu, tablolar, sütunlar, dizinler ve yabancı anahtarlar hakkında bilgi almanızı sağlar. Yansımayı şema oluşturmak, esnek veritabanı uygulamaları oluşturmak veya genel veritabanı araçları oluşturmak için kullanabilirsiniz.

Yansıma nesnesini bir veritabanı bağlantı örneğinden alabilirsiniz:

$reflection = $database->getReflection();

Tabloları Alma

Readonly özelliği $reflection->tables veritabanındaki tüm tabloların ilişkisel bir dizisini sağlar:

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

İki ek yöntem daha mevcuttur:

// Bir tablonun var olup olmadığını kontrol edin
if ($reflection->hasTable('users')) {
	echo "The table 'users' exists.";
}

// Bir tablo nesnesini alır; mevcut değilse bir istisna atar
$table = $reflection->getTable('users');

Tablo Bilgileri

Bir tablo, aşağıdaki salt okunur özellikleri sağlayan Table nesnesi tarafından temsil edilir:

  • $name: string – tablonun adı
  • $view: bool – bir manzara olup olmadığı
  • $fullName: ?string – şema da dahil olmak üzere tablonun tam adı (varsa)
  • $columns: array<string, Column> – tablonun sütunlarının ilişkisel bir dizisi
  • $indexes: Index[] – tablonun dizinlerinden oluşan bir dizi
  • $primaryKey: ?Index – tablonun birincil anahtarı veya null
  • $foreignKeys: ForeignKey[] – tablonun yabancı anahtarlarından oluşan bir dizi

Sütunlar

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

  • $name: string – sütunun adı
  • $table: ?Table – sütunun tablosuna bir referans
  • $nativeType: string – yerel veritabanı türü
  • $size: ?int – türün boyutu/uzunluğu
  • $nullable: bool – sütunun şunları içerip içermeyeceği NULL
  • $default: mixed – sütunun varsayılan değeri
  • $autoIncrement: bool – sütunun otomatik olarak artırılıp artırılmayacağı
  • $primary: bool – sütunun birincil anahtarın bir parçası olup olmadığı
  • $vendor: array – veritabanı sistemine özgü ek meta veriler
foreach ($table->columns as $name => $column) {
	echo "Column: $name\n";
	echo "Type: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Yes' : 'No') . "\n";
}

İndeksler

Bir tablonun indexes özelliği, her bir indeksin aşağıdaki özelliklere sahip bir Index örneği olduğu bir indeks dizisi içerir:

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

Bir tablonun birincil anahtarına primaryKey özelliği aracılığıyla erişilebilir; bu özellik bir Index nesnesi döndürür veya tabloda yoksa null döndürür.

// Listeleme dizinleri
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";
}

// Birincil anahtarı görüntüleme
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Primary Key: $columns\n";
}

Yabancı Anahtarlar

Bir tablonun foreignKeys özelliği, her biri aşağıdaki özelliklere sahip bir ForeignKey örneği olarak temsil edilen bir dizi yabancı anahtar içerir:

  • $foreignTable: Table – başvurulan tablo
  • $localColumns: Column[] – yerel sütunlardan oluşan bir dizi
  • $foreignColumns: Column[] – başvurulan sütunların bir dizisi
  • $name: ?string – yabancı anahtarın adı
// Yabancı anahtarları listeleme
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