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ı veyanull
$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ğiNULL
$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";
}