Reflexo da estrutura
O Nette Database fornece ferramentas para inspecionar estruturas de banco de dados por meio da classe Nette\Database\Reflection. Isso permite que você recupere informações sobre tabelas, colunas, índices e chaves estrangeiras. Você pode usar a reflexão para gerar esquemas, criar aplicativos de banco de dados flexíveis ou criar ferramentas gerais de banco de dados.
É possível obter o objeto de reflexão de uma instância de conexão de banco de dados:
$reflection = $database->getReflection();
Recuperação de tabelas
A propriedade readonly $reflection->tables
fornece uma matriz associativa de todas as tabelas do banco
de dados:
// Listagem dos nomes de todas as tabelas
foreach ($reflection->tables as $name => $table) {
echo $name . "\n";
}
Há dois métodos adicionais disponíveis:
// Verificar se uma tabela existe
if ($reflection->hasTable('users')) {
echo "The table 'users' exists.";
}
// Recuperar um objeto de tabela; lança uma exceção se ele não existir
$table = $reflection->getTable('users');
Informações sobre a tabela
Uma tabela é representada pelo objeto Table, que fornece as seguintes propriedades somente leitura:
$name: string
– o nome da tabela$view: bool
– se ela é uma exibição$fullName: ?string
– o nome completo da tabela, incluindo o esquema (se aplicável)$columns: array<string, Column>
– uma matriz associativa das colunas da tabela$indexes: Index[]
– uma matriz dos índices da tabela$primaryKey: ?Index
– a chave primária da tabela ounull
$foreignKeys: ForeignKey[]
– uma matriz das chaves estrangeiras da tabela
Colunas
A propriedade columns
de uma tabela fornece uma matriz associativa de colunas, em que a chave é o nome da
coluna e o valor é uma instância de Column com as seguintes propriedades:
$name: string
– o nome da coluna$table: ?Table
– uma referência à tabela da coluna$nativeType: string
– o tipo de banco de dados nativo$size: ?int
– o tamanho/comprimento do tipo$nullable: bool
– se a coluna pode conterNULL
$default: mixed
– o valor padrão da coluna$autoIncrement: bool
– se a coluna é auto-incrementada$primary: bool
– se a coluna faz parte da chave primária$vendor: array
– metadados adicionais específicos do sistema de banco de dados
foreach ($table->columns as $name => $column) {
echo "Column: $name\n";
echo "Type: {$column->nativeType}\n";
echo "Nullable: " . ($column->nullable ? 'Yes' : 'No') . "\n";
}
Índices
A propriedade indexes
de uma tabela contém uma matriz de índices, em que cada índice é uma instância de Index com as seguintes propriedades:
$columns: Column[]
– uma matriz de colunas que compõem o índice$unique: bool
– se o índice é exclusivo$primary: bool
– se ele é uma chave primária$name: ?string
– o nome do índice
A chave primária de uma tabela pode ser acessada por meio da propriedade primaryKey
, que retorna um objeto
Index
ou null
se a tabela não tiver um.
// Listar índices
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";
}
// Exibindo a chave primária
if ($primaryKey = $table->primaryKey) {
$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
echo "Primary Key: $columns\n";
}
Chaves estrangeiras
A propriedade foreignKeys
de uma tabela contém uma matriz de chaves estrangeiras, cada uma representada como uma
instância de ForeignKey com as
seguintes propriedades:
$foreignTable: Table
– a tabela referenciada$localColumns: Column[]
– uma matriz de colunas locais$foreignColumns: Column[]
– uma matriz de colunas referenciadas$name: ?string
– o nome da chave estrangeira
// Listagem de chaves estrangeiras
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";
}