Nette Documentation Preview

syntax
Reflexe
*******

.{data-version:3.2.1}
Nette Database proporciona herramientas para la introspección de la estructura de la base de datos utilizando la clase [api:Nette\Database\Reflection\Reflection]. Esto permite recuperar información sobre tablas, columnas, índices y claves externas. Reflection puede utilizarse para generar esquemas, crear aplicaciones flexibles basadas en bases de datos o herramientas generales de bases de datos.

Puede obtener el objeto reflection a partir de una instancia de conexión a una base de datos:

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


Trabajar con tablas .[#toc-working-with-tables]
===============================================

Usando reflection podemos navegar por todas las tablas de la base de datos:


getTables(): Nette\Database\Reflection\Table[] .[method]
--------------------------------------------------------
Devuelve un array asociativo donde la clave es el nombre de la tabla, y el valor es un array de metadatos de la tabla.

```php
// Listado de todos los nombres de tabla
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}
```


hasTable(string $name): bool .[method]
--------------------------------------
Devuelve `true` si la tabla existe, en caso contrario `false`.

```php
// Comprobación de la existencia de una tabla
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}
```


getTable(string $name): Nette\Database\Reflection\Table .[method]
-----------------------------------------------------------------
Devuelve el objeto `Nette\Database\Reflection\Table` que representa la tabla dada. Si la tabla no existe, lanza una excepción `Nette\Database\Exception\MissingTableException`.

```php
// Recuperar una tabla específica
$table = $reflection->getTable('users');
```


Información sobre columnas .[#toc-information-about-columns]
============================================================

El objeto [api:Nette\Database\Reflection\Table], que se obtiene llamando a `getTable()`, permite recuperar información detallada sobre las columnas de la tabla.


getColumns(): Nette\Database\Reflection\Column[] .[method]
----------------------------------------------------------
Devuelve una matriz de objetos `Nette\Database\Reflection\Column` que representan las columnas de la tabla.


getColumn(string $name): Nette\Database\Reflection\Column .[method]
-------------------------------------------------------------------
Devuelve el objeto [api:Nette\Database\Reflection\Column] que representa la columna dada. Si la columna no existe, lanza una excepción `Nette\Database\Exception\MissingColumnException`.

El objeto `Column` proporciona las siguientes propiedades:

- `name`: El nombre de la columna.
- `nativeType`: El tipo de datos de la columna específico de la base de datos.
- `type`: El tipo de datos normalizado de la columna (véanse las constantes `Nette\Utils\Type`).
- `nullable`: `true` si la columna puede contener `NULL`, en caso contrario `false`.
- `primary`: `true` si la columna forma parte de la clave primaria, en caso contrario `false`.
- `autoIncrement`: `true` si la columna es autoincremental, en caso contrario `false`.
- `default`: El valor por defecto de la columna, o `null` si no está definido.
- `vendor`: Una matriz con información adicional específica de la base de datos.

```php
// Recorrer todas las columnas de la tabla "usuarios
$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";
}

// Recuperación de una columna específica
$idColumn = $table->getColumn('id');
```


Índices y claves primarias .[#toc-indexes-and-primary-keys]
===========================================================


getIndexes(): Nette\Database\Reflection\Index[] .[method]
---------------------------------------------------------
Devuelve una matriz de objetos `Nette\Database\Reflection\Index` que representan los índices de la tabla.


getIndex(string $name): Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------------
Devuelve el objeto [api:Nette\Database\Reflection\Index] que representa el índice dado. Si el índice no existe, lanza una excepción `Nette\Database\Exception\MissingIndexException`.


getPrimaryKey(): ?Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------
Devuelve el objeto `Nette\Database\Reflection\Index` que representa la clave primaria de la tabla, o `null` si la tabla no tiene clave primaria.

El objeto `Index` proporciona las siguientes propiedades:

- `name`: El nombre del índice.
- `columns`: Una matriz de objetos `Nette\Database\Reflection\Column` que representan las columnas que forman parte del índice.
- `unique`: `true` si el índice es único, en caso contrario `false`.
- `primary`: `true` si el índice es la clave primaria, en caso contrario `false`.

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

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

// Listado de todos los í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";
}

// Recuperación de la clave primaria
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}
```


Claves externas .[#toc-foreign-keys]
====================================


getForeignKeys(): Nette\Database\Reflection\ForeignKey[] .[method]
------------------------------------------------------------------
Devuelve una matriz de objetos `Nette\Database\Reflection\ForeignKey` que representan las claves externas de la tabla.


getForeignKey(string $name): Nette\Database\Reflection\ForeignKey .[method]
---------------------------------------------------------------------------
Devuelve el objeto [api:Nette\Database\Reflection\ForeignKey] que representa la clave ajena dada. Si la clave ajena no existe, lanza una excepción `Nette\Database\Exception\MissingForeignKeyException`.

El objeto `ForeignKey` proporciona las siguientes propiedades:

- `name`: El nombre de la clave foránea.
- `localColumns`: Un array de objetos `Nette\Database\Reflection\Column` que representan las columnas locales que componen la clave foránea.
- `foreignTable`: Un objeto `Nette\Database\Reflection\Table` que representa la tabla externa a la que hace referencia la clave externa.
- `foreignColumns`: Un array de objetos `Nette\Database\Reflection\Column` que representan las columnas foráneas a las que hace referencia la clave foránea.

```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

Nette Database proporciona herramientas para la introspección de la estructura de la base de datos utilizando la clase Nette\Database\Reflection\Reflection. Esto permite recuperar información sobre tablas, columnas, índices y claves externas. Reflection puede utilizarse para generar esquemas, crear aplicaciones flexibles basadas en bases de datos o herramientas generales de bases de datos.

Puede obtener el objeto reflection a partir de una instancia de conexión a una base de datos:

$reflection = $connection->getReflection();

Trabajar con tablas

Usando reflection podemos navegar por todas las tablas de la base de datos:

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

Devuelve un array asociativo donde la clave es el nombre de la tabla, y el valor es un array de metadatos de la tabla.

// Listado de todos los nombres de tabla
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}

hasTable(string $name): bool

Devuelve true si la tabla existe, en caso contrario false.

// Comprobación de la existencia de una tabla
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}

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

Devuelve el objeto Nette\Database\Reflection\Table que representa la tabla dada. Si la tabla no existe, lanza una excepción Nette\Database\Exception\MissingTableException.

// Recuperar una tabla específica
$table = $reflection->getTable('users');

Información sobre columnas

El objeto Nette\Database\Reflection\Table, que se obtiene llamando a getTable(), permite recuperar información detallada sobre las columnas de la tabla.

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

Devuelve una matriz de objetos Nette\Database\Reflection\Column que representan las columnas de la tabla.

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

Devuelve el objeto Nette\Database\Reflection\Column que representa la columna dada. Si la columna no existe, lanza una excepción Nette\Database\Exception\MissingColumnException.

El objeto Column proporciona las siguientes propiedades:

  • name: El nombre de la columna.
  • nativeType: El tipo de datos de la columna específico de la base de datos.
  • type: El tipo de datos normalizado de la columna (véanse las constantes Nette\Utils\Type).
  • nullable: true si la columna puede contener NULL, en caso contrario false.
  • primary: true si la columna forma parte de la clave primaria, en caso contrario false.
  • autoIncrement: true si la columna es autoincremental, en caso contrario false.
  • default: El valor por defecto de la columna, o null si no está definido.
  • vendor: Una matriz con información adicional específica de la base de datos.
// Recorrer todas las columnas de la tabla "usuarios
$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";
}

// Recuperación de una columna específica
$idColumn = $table->getColumn('id');

Índices y claves primarias

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

Devuelve una matriz de objetos Nette\Database\Reflection\Index que representan los índices de la tabla.

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

Devuelve el objeto Nette\Database\Reflection\Index que representa el índice dado. Si el índice no existe, lanza una excepción Nette\Database\Exception\MissingIndexException.

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

Devuelve el objeto Nette\Database\Reflection\Index que representa la clave primaria de la tabla, o null si la tabla no tiene clave primaria.

El objeto Index proporciona las siguientes propiedades:

  • name: El nombre del índice.
  • columns: Una matriz de objetos Nette\Database\Reflection\Column que representan las columnas que forman parte del índice.
  • unique: true si el índice es único, en caso contrario false.
  • primary: true si el índice es la clave primaria, en caso contrario false.
$table = $reflection->getTable('users');

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

// Listado de todos los í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";
}

// Recuperación de la clave primaria
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}

Claves externas

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

Devuelve una matriz de objetos Nette\Database\Reflection\ForeignKey que representan las claves externas de la tabla.

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

Devuelve el objeto Nette\Database\Reflection\ForeignKey que representa la clave ajena dada. Si la clave ajena no existe, lanza una excepción Nette\Database\Exception\MissingForeignKeyException.

El objeto ForeignKey proporciona las siguientes propiedades:

  • name: El nombre de la clave foránea.
  • localColumns: Un array de objetos Nette\Database\Reflection\Column que representan las columnas locales que componen la clave foránea.
  • foreignTable: Un objeto Nette\Database\Reflection\Table que representa la tabla externa a la que hace referencia la clave externa.
  • foreignColumns: Un array de objetos Nette\Database\Reflection\Column que representan las columnas foráneas a las que hace referencia la clave foránea.
$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";
}