Yapı Reflection'ı

Nette Database, Nette\Database\Reflection sınıfıyla veritabanı yapısını incelemeye yarayan araçlar sunar. Tablolar, sütunlar, indeksler ve yabancı anahtarlar hakkında bilgi almanızı sağlar. Reflection'ı şema üretmek, veritabanıyla çalışan esnek uygulamalar ya da genel amaçlı veritabanı araçları yazmak için kullanabilirsiniz.

Reflection nesnesi, veritabanı bağlantısı örneğinden alınır:

$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 tabloların adlarını listeleme
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}

İki metot daha vardır:

// Bir tablonun varlığını denetleme
if ($reflection->hasTable('users')) {
	echo "Table users exists";
}

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

Tablo Bilgisi

Bir tablo, şu salt okunur özellikleri sunan Table nesnesiyle temsil edilir:

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

Sütunlar

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

  • $name: string – sütunun adı
  • $table: ?Table – sütunun tablosuna referans
  • $nativeType: string – veritabanının yerel türü
  • $size: ?int – türün 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 auto-increment olup olmadığı
  • $primary: bool – birincil anahtarın parçası olup olmadığı
  • $vendor: array – ilgili veritabanı sistemine özgü ek meta veriler
  • $comment: ?string – sütunun yorumu
foreach ($table->columns as $name => $column) {
	echo "Column: $name\n";
	echo "Type: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Yes' : 'No') . "\n";
}

İndeksler

Tablonun indexes özelliği, her indeksin şu özelliklere sahip bir Index örneği olduğu bir indeks dizisi sunar:

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

Tablonun birincil anahtarı primaryKey özelliğiyle alınabilir; bu özellik ya bir Index nesnesi ya da tablonun birincil anahtarı yoksa null döndürür.

// İndeksleri listeleme
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ı listeleme
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Primary Key: $columns\n";
}

Yabancı Anahtarlar

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

  • $foreignTable: Table – başvurulan tablo
  • $localColumns: Column[] – yerel sütunların dizisi
  • $foreignColumns: Column[] – başvurulan sütunların 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.x