Nette Documentation Preview

syntax
Reflexão da estrutura
*********************

.{data-version:3.2.1}
Nette Database fornece ferramentas para introspecção da estrutura do banco de dados usando a classe [api:Nette\Database\Reflection]. Ela permite obter informações sobre tabelas, colunas, índices e chaves estrangeiras. Você pode usar a reflexão para gerar esquemas, criar aplicações flexíveis que trabalham com o banco de dados ou ferramentas gerais de banco de dados.

Obtemos o objeto de reflexão da instância de conexão com o banco de dados:

```php
$reflection = $database->getReflection();
```


Obtenção de tabelas
-------------------

A propriedade readonly `$reflection->tables` contém um array associativo de todas as tabelas no banco de dados:

```php
// Listagem dos nomes de todas as tabelas
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}
```

Existem mais dois métodos disponíveis:

```php
// Verificação da existência da tabela
if ($reflection->hasTable('users')) {
	echo "A tabela users existe";
}

// Retorna o objeto da tabela; se não existir, lança uma exceção
$table = $reflection->getTable('users');
```


Informações sobre a tabela
--------------------------

A tabela é representada pelo objeto [Table|api:Nette\Database\Reflection\Table], que fornece as seguintes propriedades readonly:

- `$name: string` – nome da tabela
- `$view: bool` – se é uma view
- `$fullName: ?string` – nome completo da tabela incluindo o esquema (se existir)
- `$columns: array<string, Column>` – array associativo das colunas da tabela
- `$indexes: Index[]` – array de índices da tabela
- `$primaryKey: ?Index` – chave primária da tabela ou null
- `$foreignKeys: ForeignKey[]` – array de chaves estrangeiras da tabela


Colunas
-------

A propriedade `columns` da tabela fornece um array associativo de colunas, onde a chave é o nome da coluna e o valor é uma instância de [Column|api:Nette\Database\Reflection\Column] com estas propriedades:

- `$name: string` – nome da coluna
- `$table: ?Table` – referência à tabela da coluna
- `$nativeType: string` – tipo de dados nativo do banco de dados
- `$size: ?int` – tamanho/comprimento do tipo
- `$nullable: bool` – se a coluna pode conter NULL
- `$default: mixed` – valor padrão da coluna
- `$autoIncrement: bool` – se a coluna é auto-increment
- `$primary: bool` – se faz parte da chave primária
- `$vendor: array` – metadados adicionais específicos do sistema de banco de dados

```php
foreach ($table->columns as $name => $column) {
	echo "Coluna: $name\n";
	echo "Tipo: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Sim' : 'Não') . "\n";
}
```


Índices
-------

A propriedade `indexes` da tabela fornece um array de índices, onde cada índice é uma instância de [Index|api:Nette\Database\Reflection\Index] com estas propriedades:

- `$columns: Column[]` – array de colunas que formam o índice
- `$unique: bool` – se o índice é único
- `$primary: bool` – se é a chave primária
- `$name: ?string` – nome do índice

A chave primária da tabela pode ser obtida usando a propriedade `primaryKey`, que retorna ou um objeto `Index`, ou `null` caso a tabela não tenha chave primária.

```php
// Listagem de índices
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "Índice" . ($index->name ? " {$index->name}" : '') . ":\n";
	echo "  Colunas: $columns\n";
	echo "  Unique: " . ($index->unique ? 'Sim' : 'Não') . "\n";
}

// Listagem da chave primária
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Chave primária: $columns\n";
}
```


Chaves estrangeiras
-------------------

A propriedade `foreignKeys` da tabela fornece um array de chaves estrangeiras, onde cada chave estrangeira é uma instância de [ForeignKey|api:Nette\Database\Reflection\ForeignKey] com estas propriedades:

- `$foreignTable: Table` – tabela referenciada
- `$localColumns: Column[]` – array de colunas locais
- `$foreignColumns: Column[]` – array de colunas referenciadas
- `$name: ?string` – nome da chave estrangeira

```php
// 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";
}
```

Reflexão da estrutura

Nette Database fornece ferramentas para introspecção da estrutura do banco de dados usando a classe Nette\Database\Reflection. Ela permite obter informações sobre tabelas, colunas, índices e chaves estrangeiras. Você pode usar a reflexão para gerar esquemas, criar aplicações flexíveis que trabalham com o banco de dados ou ferramentas gerais de banco de dados.

Obtemos o objeto de reflexão da instância de conexão com o banco de dados:

$reflection = $database->getReflection();

Obtenção de tabelas

A propriedade readonly $reflection->tables contém um array associativo de todas as tabelas no banco de dados:

// Listagem dos nomes de todas as tabelas
foreach ($reflection->tables as $name => $table) {
	echo $name . "\n";
}

Existem mais dois métodos disponíveis:

// Verificação da existência da tabela
if ($reflection->hasTable('users')) {
	echo "A tabela users existe";
}

// Retorna o objeto da tabela; se não existir, lança uma exceção
$table = $reflection->getTable('users');

Informações sobre a tabela

A tabela é representada pelo objeto Table, que fornece as seguintes propriedades readonly:

  • $name: string – nome da tabela
  • $view: bool – se é uma view
  • $fullName: ?string – nome completo da tabela incluindo o esquema (se existir)
  • $columns: array<string, Column> – array associativo das colunas da tabela
  • $indexes: Index[] – array de índices da tabela
  • $primaryKey: ?Index – chave primária da tabela ou null
  • $foreignKeys: ForeignKey[] – array de chaves estrangeiras da tabela

Colunas

A propriedade columns da tabela fornece um array associativo de colunas, onde a chave é o nome da coluna e o valor é uma instância de Column com estas propriedades:

  • $name: string – nome da coluna
  • $table: ?Table – referência à tabela da coluna
  • $nativeType: string – tipo de dados nativo do banco de dados
  • $size: ?int – tamanho/comprimento do tipo
  • $nullable: bool – se a coluna pode conter NULL
  • $default: mixed – valor padrão da coluna
  • $autoIncrement: bool – se a coluna é auto-increment
  • $primary: bool – se 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 "Coluna: $name\n";
	echo "Tipo: {$column->nativeType}\n";
	echo "Nullable: " . ($column->nullable ? 'Sim' : 'Não') . "\n";
}

Índices

A propriedade indexes da tabela fornece um array de índices, onde cada índice é uma instância de Index com estas propriedades:

  • $columns: Column[] – array de colunas que formam o índice
  • $unique: bool – se o índice é único
  • $primary: bool – se é a chave primária
  • $name: ?string – nome do índice

A chave primária da tabela pode ser obtida usando a propriedade primaryKey, que retorna ou um objeto Index, ou null caso a tabela não tenha chave primária.

// Listagem de índices
foreach ($table->indexes as $index) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $index->columns));
	echo "Índice" . ($index->name ? " {$index->name}" : '') . ":\n";
	echo "  Colunas: $columns\n";
	echo "  Unique: " . ($index->unique ? 'Sim' : 'Não') . "\n";
}

// Listagem da chave primária
if ($primaryKey = $table->primaryKey) {
	$columns = implode(', ', array_map(fn($col) => $col->name, $primaryKey->columns));
	echo "Chave primária: $columns\n";
}

Chaves estrangeiras

A propriedade foreignKeys da tabela fornece um array de chaves estrangeiras, onde cada chave estrangeira é uma instância de ForeignKey com estas propriedades:

  • $foreignTable: Table – tabela referenciada
  • $localColumns: Column[] – array de colunas locais
  • $foreignColumns: Column[] – array de colunas referenciadas
  • $name: ?string – 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";
}