Reflexe
Nette Veritabanı, Nette\Database\Reflection\Reflection sınıfını kullanarak veritabanı yapısı iç gözlemi için araçlar sağlar. Bu, tablolar, sütunlar, dizinler ve yabancı anahtarlar hakkında bilgi almanızı sağlar. Reflection, şema oluşturma, esnek veritabanı güdümlü uygulamalar oluşturma veya genel veritabanı araçları için kullanılabilir.
Yansıma nesnesini bir veritabanı bağlantı örneğinden elde edebilirsiniz:
$reflection = $connection->getReflection();
Tablolarla çalışma
Yansımayı kullanarak veritabanındaki tüm tablolara göz atabiliriz:
getTables(): Nette\Database\Reflection\Table[]
Anahtarın tablo adı ve değerin tablo meta verileri dizisi olduğu bir ilişkisel dizi döndürür.
// Tüm tablo adlarını listeleme
foreach ($reflection->getTables() as $table) {
echo $table['name'] . "\n";
}
hasTable(string $name): bool
Tablo mevcutsa true
, aksi takdirde false
döndürür.
// Tablo varlığını kontrol etme
if ($reflection->hasTable('users')) {
echo "The 'users' table exists";
}
getTable(string $name): Nette\Database\Reflection\Table
Verilen tabloyu temsil eden Nette\Database\Reflection\Table
nesnesini döndürür. Tablo mevcut değilse, bir
istisna atar Nette\Database\Exception\MissingTableException
.
// Belirli bir tabloyu alma
$table = $reflection->getTable('users');
Sütunlar hakkında bilgi
getTable()
çağrısıyla elde edilen Nette\Database\Reflection\Table nesnesi, tablo
sütunları hakkında ayrıntılı bilgi almanızı sağlar.
getColumns(): Nette\Database\Reflection\Column[]
Tablo sütunlarını temsil eden Nette\Database\Reflection\Column
nesnelerinden oluşan bir dizi döndürür.
getColumn(string $name): Nette\Database\Reflection\Column
Verilen sütunu temsil eden Nette\Database\Reflection\Column nesnesini
döndürür. Sütun mevcut değilse, bir istisna atar Nette\Database\Exception\MissingColumnException
.
Column
nesnesi aşağıdaki özellikleri sağlar:
name
: Sütun adı.nativeType
: Veritabanına özgü sütun veri türü.type
: Normalleştirilmiş sütun veri türü (bkz.Nette\Utils\Type
sabitleri).nullable
: SütunNULL
içerebiliyorsatrue
, aksi takdirdefalse
.primary
:true
sütun birincil anahtarın bir parçasıysa, aksi takdirdefalse
.autoIncrement
: Sütun otomatik olarak artıyorsatrue
, aksi takdirdefalse
.default
: Sütunun varsayılan değeri veya tanımlanmamışsanull
.vendor
: Veritabanına özgü ek bilgiler içeren bir dizi.
// 'users' tablosundaki tüm sütunlar arasında yineleme
$table = $reflection->getTable('users');
foreach ($table->getColumns() as $column) {
echo "Column: " . $column->name . "\n";
echo "Type: " . $column->nativeType . "\n";
echo "Allows NULL: " . ($column->nullable ? 'Yes': 'No') . "\n";
echo "Default value: " . ($column->default ?? 'None') . "\n";
echo "Is primary key: " . ($column->primary ? 'Yes': 'No') . "\n";
echo "Is auto-increment: " . ($column->autoIncrement ? 'Yes': 'No') . "\n";
}
// Belirli bir sütunu alma
$idColumn = $table->getColumn('id');
Dizinler ve birincil anahtarlar
getIndexes(): Nette\Database\Reflection\Index[]
Tablo dizinlerini temsil eden Nette\Database\Reflection\Index
nesnelerinden oluşan bir dizi döndürür.
getIndex(string $name): Nette\Database\Reflection\Index
Verilen dizini temsil eden Nette\Database\Reflection\Index nesnesini
döndürür. Dizin mevcut değilse, bir istisna atar Nette\Database\Exception\MissingIndexException
.
getPrimaryKey(): ?Nette\Database\Reflection\Index
Tablonun birincil anahtarını temsil eden Nette\Database\Reflection\Index
nesnesini veya tablonun birincil
anahtarı yoksa null
nesnesini döndürür.
Index
nesnesi aşağıdaki özellikleri sağlar:
name
: Dizinin adı.columns
: Dizinin parçası olan sütunları temsil edenNette\Database\Reflection\Column
nesnelerinden oluşan bir dizi.unique
: İndeks benzersiz isetrue
, aksi takdirdefalse
.primary
:true
dizin birincil anahtar ise, aksi takdirdefalse
.
$table = $reflection->getTable('users');
$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));
// Tüm dizinleri listeleme
foreach ($table->getIndexes() as $index) {
echo "Index: " . ($index->name ?? 'Unnamed') . "\n";
echo "Columns: " . $printColumnNames($index->columns) . "\n";
echo "Is unique: " . ($index->unique ? 'Yes': 'No') . "\n";
echo "Is primary key: " . ($index->primary ? 'Yes': 'No') . "\n";
}
// Birincil anahtarı alma
if ($primaryKey = $table->getPrimaryKey()) {
echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}
Yabancı anahtarlar
getForeignKeys(): Nette\Database\Reflection\ForeignKey[]
Tablonun yabancı anahtarlarını temsil eden Nette\Database\Reflection\ForeignKey
nesnelerinden oluşan bir dizi
döndürür.
getForeignKey(string $name): Nette\Database\Reflection\ForeignKey
Verilen yabancı anahtarı temsil eden Nette\Database\Reflection\ForeignKey
nesnesini döndürür. Yabancı anahtar mevcut değilse, bir istisna atar
Nette\Database\Exception\MissingForeignKeyException
.
ForeignKey
nesnesi aşağıdaki özellikleri sağlar:
name
: Yabancı anahtarın adı.localColumns
: Yabancı anahtarı oluşturan yerel sütunları temsil edenNette\Database\Reflection\Column
nesnelerinden oluşan bir dizi.foreignTable
: Yabancı anahtarın başvurduğu yabancı tabloyu temsil eden birNette\Database\Reflection\Table
nesnesi.foreignColumns
: Yabancı anahtarın başvurduğu yabancı sütunları temsil edenNette\Database\Reflection\Column
nesnelerinden oluşan bir dizi.
$table = $reflection->getTable('books');
$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));
foreach ($table->getForeignKeys() as $fk) {
echo "Foreign key: " . ($fk->name ?? 'Unnamed') . "\n";
echo "Local columns: " . $printColumnNames($fk->localColumns) . "\n";
echo "References table: {$fk->foreignTable->name}\n";
echo "References columns: " . $printColumnNames($fk->foreignColumns) . "\n";
}