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";
}