Відображення структури

Nette Database надає інструменти для перевірки структури бази даних за допомогою класу Nette\Database\Reflection. Це дозволяє отримувати інформацію про таблиці, стовпці, індекси та зовнішні ключі. Ви можете використовувати рефлексію для генерації схем, створення гнучких додатків для роботи з базами даних або створення загальних інструментів для роботи з базами даних.

Ви можете отримати об'єкт рефлексії з екземпляра підключення до бази даних:

$reflection = $database->getReflection();

Отримання таблиць

Властивість readonly $reflection->tables надає асоціативний масив усіх таблиць у базі даних:

// Перерахування назв усіх таблиць
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}

Існує ще два додаткових методи:

// Перевірка існування таблиці
if ($reflection->hasTable('users')) {
	echo "The table 'users' exists.";
}

// Отримати об'єкт таблиці; згенерує виключення, якщо вона не існує
$table = $reflection->getTable('users');

Інформація про таблицю

Таблиця представлена об'єктом Table, який має наступні властивості, доступні лише для читання:

  • $name: string – ім'я таблиці
  • $view: bool – чи є вона представленням
  • $fullName: ?string – повне ім'я таблиці, включаючи схему (якщо застосовно)
  • $columns: array<string, Column> – асоціативний масив стовпців таблиці
  • $indexes: Index[] – масив індексів таблиці
  • $primaryKey: ?Index – первинний ключ таблиці або null
  • $foreignKeys: ForeignKey[] – масив зовнішніх ключів таблиці

Стовпці

Властивість columns таблиці надає асоціативний масив стовпців, де ключем є назва стовпця, а значенням – екземпляр Column з наступними властивостями:

  • $name: string – ім'я стовпця
  • $table: ?Table – посилання на таблицю стовпця
  • $nativeType: string – тип нативної бази даних
  • $size: ?int – розмір/довжина типу
  • $nullable: bool – чи може стовпець містити NULL
  • $default: mixed – значення стовпця за замовчуванням
  • $autoIncrement: bool – чи є стовпець автоінкрементованим
  • $primary: bool – чи є стовпець частиною первинного ключа
  • $vendor: array – додаткові метадані, специфічні для системи баз даних
foreach ($table->columns as $name => $column) {
	echo "Column: $name\n";
	echo "Type: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Yes' : 'No') . "\n";
}

Індекси

Властивість indexes таблиці містить масив індексів, де кожен індекс є екземпляром типу Index з наступними властивостями:

  • $columns: Column[] – масив стовпців, що складають індекс
  • $unique: bool – чи є індекс унікальним
  • $primary: bool – чи є він первинним ключем
  • $name: ?string – ім'я індексу

Доступ до первинного ключа таблиці можна отримати через властивість primaryKey, яка повертає об'єкт Index або null, якщо таблиця його не має.

// Індекси лістингу
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";
}

// Відображення первинного ключа
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Primary Key: $columns\n";
}

Зовнішні ключі

Властивість foreignKeys таблиці містить масив зовнішніх ключів, кожен з яких представлений як екземпляр ForeignKey з наступними властивостями:

  • $foreignTable: Table – таблиця, на яку є посилання
  • $localColumns: Column[] – масив локальних стовпців
  • $foreignColumns: Column[] – масив стовпців, на які є посилання
  • $name: ?string – ім'я зовнішнього ключа
// Перерахування зовнішніх ключів
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";
}
версію: 4.0