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ütun NULL içerebiliyorsa true, aksi takdirde false.
  • primary: true sütun birincil anahtarın bir parçasıysa, aksi takdirde false.
  • autoIncrement: Sütun otomatik olarak artıyorsa true, aksi takdirde false.
  • default: Sütunun varsayılan değeri veya tanımlanmamışsa null.
  • 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 eden Nette\Database\Reflection\Column nesnelerinden oluşan bir dizi.
  • unique: İndeks benzersiz ise true, aksi takdirde false.
  • primary: true dizin birincil anahtar ise, aksi takdirde false.
$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 eden Nette\Database\Reflection\Column nesnelerinden oluşan bir dizi.
  • foreignTable: Yabancı anahtarın başvurduğu yabancı tabloyu temsil eden bir Nette\Database\Reflection\Table nesnesi.
  • foreignColumns: Yabancı anahtarın başvurduğu yabancı sütunları temsil eden Nette\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";
}
versiyon: 4.0