Nette Documentation Preview

syntax
Reflexe
*******

.{data-version:3.2.1}
O Nette Database fornece ferramentas para introspecção da estrutura do banco de dados usando a classe [api:Nette\Database\Reflection\Reflection]. Isso permite que você recupere informações sobre tabelas, colunas, índices e chaves estrangeiras. A reflexão pode ser usada para geração de esquemas, criação de aplicativos flexíveis orientados por banco de dados ou ferramentas gerais de banco de dados.

Você pode obter o objeto de reflexão de uma instância de conexão de banco de dados:

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


Trabalho com tabelas .[#toc-working-with-tables]
================================================

Usando a reflexão, podemos navegar por todas as tabelas do banco de dados:


getTables(): Nette\Database\Reflection\Table[] .[method]
--------------------------------------------------------
Retorna uma matriz associativa em que a chave é o nome da tabela e o valor é uma matriz de metadados da tabela.

```php
// Listagem de todos os nomes de tabelas
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}
```


hasTable(string $name): bool .[method]
--------------------------------------
Retorna `true` se a tabela existir, caso contrário, retorna `false`.

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


getTable(string $name): Nette\Database\Reflection\Table .[method]
-----------------------------------------------------------------
Retorna o objeto `Nette\Database\Reflection\Table` que representa a tabela fornecida. Se a tabela não existir, ele lança uma exceção `Nette\Database\Exception\MissingTableException`.

```php
// Recuperação de uma tabela específica
$table = $reflection->getTable('users');
```


Informações sobre colunas .[#toc-information-about-columns]
===========================================================

O objeto [api:Nette\Database\Reflection\Table], obtido pela chamada de `getTable()`, permite recuperar informações detalhadas sobre as colunas da tabela.


getColumns(): Nette\Database\Reflection\Column[] .[method]
----------------------------------------------------------
Retorna uma matriz de objetos `Nette\Database\Reflection\Column` que representam as colunas da tabela.


getColumn(string $name): Nette\Database\Reflection\Column .[method]
-------------------------------------------------------------------
Retorna o objeto [api:Nette\Database\Reflection\Column] que representa a coluna fornecida. Se a coluna não existir, ele lança uma exceção `Nette\Database\Exception\MissingColumnException`.

O objeto `Column` fornece as seguintes propriedades:

- `name`: O nome da coluna.
- `nativeType`: O tipo de dados da coluna específico do banco de dados.
- `type`: O tipo de dados normalizado da coluna (consulte as constantes `Nette\Utils\Type`).
- `nullable`: `true` se a coluna puder conter `NULL`, caso contrário, `false`.
- `primary`: `true` se a coluna fizer parte da chave primária, caso contrário, `false`.
- `autoIncrement`: `true` se a coluna for autoincrementada, caso contrário, `false`.
- `default`: O valor padrão da coluna ou `null` se não estiver definido.
- `vendor`: Uma matriz com informações adicionais específicas do banco de dados.

```php
// Iteração por todas as colunas da tabela "users".
$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";
}

// Recuperação de uma coluna específica
$idColumn = $table->getColumn('id');
```


Índices e chaves primárias .[#toc-indexes-and-primary-keys]
===========================================================


getIndexes(): Nette\Database\Reflection\Index[] .[method]
---------------------------------------------------------
Retorna uma matriz de objetos `Nette\Database\Reflection\Index` que representam os índices da tabela.


getIndex(string $name): Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------------
Retorna o objeto [api:Nette\Database\Reflection\Index] que representa o índice fornecido. Se o índice não existir, ele lança uma exceção `Nette\Database\Exception\MissingIndexException`.


getPrimaryKey(): ?Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------
Retorna o objeto `Nette\Database\Reflection\Index` que representa a chave primária da tabela ou `null` se a tabela não tiver chave primária.

O objeto `Index` fornece as seguintes propriedades:

- `name`: O nome do índice.
- `columns`: Uma matriz de objetos `Nette\Database\Reflection\Column` que representam as colunas que fazem parte do índice.
- `unique`: `true` se o índice for exclusivo, caso contrário, `false`.
- `primary`: `true` se o índice for a chave primária, caso contrário, `false`.

```php
$table = $reflection->getTable('users');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

// Listar todos os índices
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";
}

// Recuperação da chave primária
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}
```


Chaves estrangeiras .[#toc-foreign-keys]
========================================


getForeignKeys(): Nette\Database\Reflection\ForeignKey[] .[method]
------------------------------------------------------------------
Retorna uma matriz de objetos `Nette\Database\Reflection\ForeignKey` que representam as chaves estrangeiras da tabela.


getForeignKey(string $name): Nette\Database\Reflection\ForeignKey .[method]
---------------------------------------------------------------------------
Retorna o objeto [api:Nette\Database\Reflection\ForeignKey] que representa a chave estrangeira fornecida. Se a chave estrangeira não existir, ele lança uma exceção `Nette\Database\Exception\MissingForeignKeyException`.

O objeto `ForeignKey` fornece as seguintes propriedades:

- `name`: O nome da chave estrangeira.
- `localColumns`: Uma matriz de objetos `Nette\Database\Reflection\Column` que representa as colunas locais que compõem a chave estrangeira.
- `foreignTable`: Um objeto `Nette\Database\Reflection\Table` que representa a tabela estrangeira à qual a chave estrangeira faz referência.
- `foreignColumns`: Uma matriz de objetos `Nette\Database\Reflection\Column` que representam as colunas estrangeiras às quais a chave estrangeira faz referência.

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

Reflexe

O Nette Database fornece ferramentas para introspecção da estrutura do banco de dados usando a classe Nette\Database\Reflection\Reflection. Isso permite que você recupere informações sobre tabelas, colunas, índices e chaves estrangeiras. A reflexão pode ser usada para geração de esquemas, criação de aplicativos flexíveis orientados por banco de dados ou ferramentas gerais de banco de dados.

Você pode obter o objeto de reflexão de uma instância de conexão de banco de dados:

$reflection = $connection->getReflection();

Trabalho com tabelas

Usando a reflexão, podemos navegar por todas as tabelas do banco de dados:

getTables(): Nette\Database\Reflection\Table[]

Retorna uma matriz associativa em que a chave é o nome da tabela e o valor é uma matriz de metadados da tabela.

// Listagem de todos os nomes de tabelas
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}

hasTable(string $name): bool

Retorna true se a tabela existir, caso contrário, retorna false.

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

getTable(string $name): Nette\Database\Reflection\Table

Retorna o objeto Nette\Database\Reflection\Table que representa a tabela fornecida. Se a tabela não existir, ele lança uma exceção Nette\Database\Exception\MissingTableException.

// Recuperação de uma tabela específica
$table = $reflection->getTable('users');

Informações sobre colunas

O objeto Nette\Database\Reflection\Table, obtido pela chamada de getTable(), permite recuperar informações detalhadas sobre as colunas da tabela.

getColumns(): Nette\Database\Reflection\Column[]

Retorna uma matriz de objetos Nette\Database\Reflection\Column que representam as colunas da tabela.

getColumn(string $name): Nette\Database\Reflection\Column

Retorna o objeto Nette\Database\Reflection\Column que representa a coluna fornecida. Se a coluna não existir, ele lança uma exceção Nette\Database\Exception\MissingColumnException.

O objeto Column fornece as seguintes propriedades:

  • name: O nome da coluna.
  • nativeType: O tipo de dados da coluna específico do banco de dados.
  • type: O tipo de dados normalizado da coluna (consulte as constantes Nette\Utils\Type).
  • nullable: true se a coluna puder conter NULL, caso contrário, false.
  • primary: true se a coluna fizer parte da chave primária, caso contrário, false.
  • autoIncrement: true se a coluna for autoincrementada, caso contrário, false.
  • default: O valor padrão da coluna ou null se não estiver definido.
  • vendor: Uma matriz com informações adicionais específicas do banco de dados.
// Iteração por todas as colunas da tabela "users".
$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";
}

// Recuperação de uma coluna específica
$idColumn = $table->getColumn('id');

Índices e chaves primárias

getIndexes(): Nette\Database\Reflection\Index[]

Retorna uma matriz de objetos Nette\Database\Reflection\Index que representam os índices da tabela.

getIndex(string $name): Nette\Database\Reflection\Index

Retorna o objeto Nette\Database\Reflection\Index que representa o índice fornecido. Se o índice não existir, ele lança uma exceção Nette\Database\Exception\MissingIndexException.

getPrimaryKey(): ?Nette\Database\Reflection\Index

Retorna o objeto Nette\Database\Reflection\Index que representa a chave primária da tabela ou null se a tabela não tiver chave primária.

O objeto Index fornece as seguintes propriedades:

  • name: O nome do índice.
  • columns: Uma matriz de objetos Nette\Database\Reflection\Column que representam as colunas que fazem parte do índice.
  • unique: true se o índice for exclusivo, caso contrário, false.
  • primary: true se o índice for a chave primária, caso contrário, false.
$table = $reflection->getTable('users');

$printColumnNames = fn(array $columns) => implode(', ', array_map(fn($col) => $col->name, $columns));

// Listar todos os índices
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";
}

// Recuperação da chave primária
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}

Chaves estrangeiras

getForeignKeys(): Nette\Database\Reflection\ForeignKey[]

Retorna uma matriz de objetos Nette\Database\Reflection\ForeignKey que representam as chaves estrangeiras da tabela.

getForeignKey(string $name): Nette\Database\Reflection\ForeignKey

Retorna o objeto Nette\Database\Reflection\ForeignKey que representa a chave estrangeira fornecida. Se a chave estrangeira não existir, ele lança uma exceção Nette\Database\Exception\MissingForeignKeyException.

O objeto ForeignKey fornece as seguintes propriedades:

  • name: O nome da chave estrangeira.
  • localColumns: Uma matriz de objetos Nette\Database\Reflection\Column que representa as colunas locais que compõem a chave estrangeira.
  • foreignTable: Um objeto Nette\Database\Reflection\Table que representa a tabela estrangeira à qual a chave estrangeira faz referência.
  • foreignColumns: Uma matriz de objetos Nette\Database\Reflection\Column que representam as colunas estrangeiras às quais a chave estrangeira faz referência.
$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";
}