Nette Documentation Preview

syntax
Reflexe
*******

.{data-version:3.2.1}
Η Nette Database παρέχει εργαλεία για την ενδοσκόπηση της δομής της βάσης δεδομένων χρησιμοποιώντας την κλάση [api:Nette\Database\Reflection\Reflection]. Αυτό σας επιτρέπει να ανακτάτε πληροφορίες σχετικά με πίνακες, στήλες, δείκτες και ξένα κλειδιά. Η αντανάκλαση μπορεί να χρησιμοποιηθεί για τη δημιουργία σχημάτων, τη δημιουργία ευέλικτων εφαρμογών βασισμένων σε βάσεις δεδομένων ή για γενικά εργαλεία βάσεων δεδομένων.

Μπορείτε να λάβετε το αντικείμενο της αντανάκλασης από μια περίπτωση σύνδεσης με τη βάση δεδομένων:

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


Εργασία με πίνακες .[#toc-working-with-tables]
==============================================

Χρησιμοποιώντας την αντανάκλαση μπορούμε να περιηγηθούμε σε όλους τους πίνακες της βάσης δεδομένων:


getTables(): Nette\Database\Reflection\Table[] .[method]
--------------------------------------------------------
Επιστρέφει έναν συσχετιστικό πίνακα όπου το κλειδί είναι το όνομα του πίνακα και η τιμή είναι ένας πίνακας μεταδεδομένων του πίνακα.

```php
// Λίστα με όλα τα ονόματα πινάκων
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}
```


hasTable(string $name): bool .[method]
--------------------------------------
Επιστρέφει `true` εάν ο πίνακας υπάρχει, διαφορετικά `false`.

```php
// Έλεγχος ύπαρξης πίνακα
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}
```


getTable(string $name): Nette\Database\Reflection\Table .[method]
-----------------------------------------------------------------
Επιστρέφει το αντικείμενο `Nette\Database\Reflection\Table` που αντιπροσωπεύει τον συγκεκριμένο πίνακα. Εάν ο πίνακας δεν υπάρχει, πετάει μια εξαίρεση `Nette\Database\Exception\MissingTableException`.

```php
// Ανάκτηση ενός συγκεκριμένου πίνακα
$table = $reflection->getTable('users');
```


Πληροφορίες για τις στήλες .[#toc-information-about-columns]
============================================================

Το αντικείμενο [api:Nette\Database\Reflection\Table], το οποίο λαμβάνεται με την κλήση του `getTable()`, σας επιτρέπει να ανακτήσετε λεπτομερείς πληροφορίες σχετικά με τις στήλες του πίνακα.


getColumns(): Nette\Database\Reflection\Column[] .[method]
----------------------------------------------------------
Επιστρέφει έναν πίνακα αντικειμένων `Nette\Database\Reflection\Column` που αναπαριστούν τις στήλες του πίνακα.


getColumn(string $name): Nette\Database\Reflection\Column .[method]
-------------------------------------------------------------------
Επιστρέφει το αντικείμενο [api:Nette\Database\Reflection\Column] που αντιπροσωπεύει τη δεδομένη στήλη. Εάν η στήλη δεν υπάρχει, πετάει μια εξαίρεση `Nette\Database\Exception\MissingColumnException`.

Το αντικείμενο `Column` παρέχει τις ακόλουθες ιδιότητες:

- `name`: Το όνομα της στήλης.
- `nativeType`: Ο συγκεκριμένος τύπος δεδομένων της στήλης για τη βάση δεδομένων.
- `type`: Ο κανονικοποιημένος τύπος δεδομένων της στήλης (βλέπε σταθερές `Nette\Utils\Type`).
- `nullable`: `true` εάν η στήλη μπορεί να περιέχει `NULL`, διαφορετικά `false`.
- `primary`: `true` αν η στήλη είναι μέρος του πρωτεύοντος κλειδιού, διαφορετικά `false`.
- `autoIncrement`: `true` αν η στήλη είναι αυτόματης αύξησης, διαφορετικά `false`.
- `default`: Η προεπιλεγμένη τιμή της στήλης, ή `null` εάν δεν έχει οριστεί.
- `vendor`: Ένας πίνακας με πρόσθετες πληροφορίες σχετικά με τη βάση δεδομένων.

```php
// Επανάληψη όλων των στηλών του πίνακα '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";
}

// Ανάκτηση μιας συγκεκριμένης στήλης
$idColumn = $table->getColumn('id');
```


Δείκτες και πρωτεύοντα κλειδιά .[#toc-indexes-and-primary-keys]
===============================================================


getIndexes(): Nette\Database\Reflection\Index[] .[method]
---------------------------------------------------------
Επιστρέφει έναν πίνακα αντικειμένων `Nette\Database\Reflection\Index` που αντιπροσωπεύουν τους δείκτες του πίνακα.


getIndex(string $name): Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------------
Επιστρέφει το αντικείμενο [api:Nette\Database\Reflection\Index] που αντιπροσωπεύει το δεδομένο δείκτη. Εάν το ευρετήριο δεν υπάρχει, πετάει μια εξαίρεση `Nette\Database\Exception\MissingIndexException`.


getPrimaryKey(): ?Nette\Database\Reflection\Index .[method]
-----------------------------------------------------------
Επιστρέφει το αντικείμενο `Nette\Database\Reflection\Index` που αντιπροσωπεύει το πρωτεύον κλειδί του πίνακα ή το `null` εάν ο πίνακας δεν έχει πρωτεύον κλειδί.

Το αντικείμενο `Index` παρέχει τις ακόλουθες ιδιότητες:

- `name`: Το όνομα του δείκτη.
- `columns`: Ένας πίνακας αντικειμένων `Nette\Database\Reflection\Column` που αναπαριστούν τις στήλες που αποτελούν μέρος του ευρετηρίου.
- `unique`: `true` εάν το ευρετήριο είναι μοναδικό, διαφορετικά `false`.
- `primary`: `true` αν το ευρετήριο είναι το πρωτεύον κλειδί, διαφορετικά `false`.

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

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

// Λίστα όλων των ευρετηρίων
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";
}

// Ανάκτηση του πρωτεύοντος κλειδιού
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}
```


Ξένα κλειδιά .[#toc-foreign-keys]
=================================


getForeignKeys(): Nette\Database\Reflection\ForeignKey[] .[method]
------------------------------------------------------------------
Επιστρέφει έναν πίνακα αντικειμένων `Nette\Database\Reflection\ForeignKey` που αντιπροσωπεύουν τα ξένα κλειδιά του πίνακα.


getForeignKey(string $name): Nette\Database\Reflection\ForeignKey .[method]
---------------------------------------------------------------------------
Επιστρέφει το αντικείμενο [api:Nette\Database\Reflection\ForeignKey] που αντιπροσωπεύει το συγκεκριμένο ξένο κλειδί. Εάν το ξένο κλειδί δεν υπάρχει, πετάει μια εξαίρεση `Nette\Database\Exception\MissingForeignKeyException`.

Το αντικείμενο `ForeignKey` παρέχει τις ακόλουθες ιδιότητες:

- `name`: Το όνομα του ξένου κλειδιού.
- `localColumns`: Ένας πίνακας αντικειμένων `Nette\Database\Reflection\Column` που αντιπροσωπεύουν τις τοπικές στήλες που αποτελούν το ξένο κλειδί.
- `foreignTable`: Ένα αντικείμενο `Nette\Database\Reflection\Table` που αναπαριστά τον ξένο πίνακα στον οποίο αναφέρεται το ξένο κλειδί.
- `foreignColumns`: Ένας πίνακας αντικειμένων `Nette\Database\Reflection\Column` που αναπαριστούν τις ξένες στήλες στις οποίες αναφέρεται το ξένο κλειδί.

```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 παρέχει εργαλεία για την ενδοσκόπηση της δομής της βάσης δεδομένων χρησιμοποιώντας την κλάση Nette\Database\Reflection\Reflection. Αυτό σας επιτρέπει να ανακτάτε πληροφορίες σχετικά με πίνακες, στήλες, δείκτες και ξένα κλειδιά. Η αντανάκλαση μπορεί να χρησιμοποιηθεί για τη δημιουργία σχημάτων, τη δημιουργία ευέλικτων εφαρμογών βασισμένων σε βάσεις δεδομένων ή για γενικά εργαλεία βάσεων δεδομένων.

Μπορείτε να λάβετε το αντικείμενο της αντανάκλασης από μια περίπτωση σύνδεσης με τη βάση δεδομένων:

$reflection = $connection->getReflection();

Εργασία με πίνακες

Χρησιμοποιώντας την αντανάκλαση μπορούμε να περιηγηθούμε σε όλους τους πίνακες της βάσης δεδομένων:

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

Επιστρέφει έναν συσχετιστικό πίνακα όπου το κλειδί είναι το όνομα του πίνακα και η τιμή είναι ένας πίνακας μεταδεδομένων του πίνακα.

// Λίστα με όλα τα ονόματα πινάκων
foreach ($reflection->getTables() as $table) {
	echo $table['name'] . "\n";
}

hasTable(string $name): bool

Επιστρέφει true εάν ο πίνακας υπάρχει, διαφορετικά false.

// Έλεγχος ύπαρξης πίνακα
if ($reflection->hasTable('users')) {
	echo "The 'users' table exists";
}

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

Επιστρέφει το αντικείμενο Nette\Database\Reflection\Table που αντιπροσωπεύει τον συγκεκριμένο πίνακα. Εάν ο πίνακας δεν υπάρχει, πετάει μια εξαίρεση Nette\Database\Exception\MissingTableException.

// Ανάκτηση ενός συγκεκριμένου πίνακα
$table = $reflection->getTable('users');

Πληροφορίες για τις στήλες

Το αντικείμενο Nette\Database\Reflection\Table, το οποίο λαμβάνεται με την κλήση του getTable(), σας επιτρέπει να ανακτήσετε λεπτομερείς πληροφορίες σχετικά με τις στήλες του πίνακα.

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

Επιστρέφει έναν πίνακα αντικειμένων Nette\Database\Reflection\Column που αναπαριστούν τις στήλες του πίνακα.

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

Επιστρέφει το αντικείμενο Nette\Database\Reflection\Column που αντιπροσωπεύει τη δεδομένη στήλη. Εάν η στήλη δεν υπάρχει, πετάει μια εξαίρεση Nette\Database\Exception\MissingColumnException.

Το αντικείμενο Column παρέχει τις ακόλουθες ιδιότητες:

  • name: Το όνομα της στήλης.
  • nativeType: Ο συγκεκριμένος τύπος δεδομένων της στήλης για τη βάση δεδομένων.
  • type: Ο κανονικοποιημένος τύπος δεδομένων της στήλης (βλέπε σταθερές Nette\Utils\Type).
  • nullable: true εάν η στήλη μπορεί να περιέχει NULL, διαφορετικά false.
  • primary: true αν η στήλη είναι μέρος του πρωτεύοντος κλειδιού, διαφορετικά false.
  • autoIncrement: true αν η στήλη είναι αυτόματης αύξησης, διαφορετικά false.
  • default: Η προεπιλεγμένη τιμή της στήλης, ή null εάν δεν έχει οριστεί.
  • vendor: Ένας πίνακας με πρόσθετες πληροφορίες σχετικά με τη βάση δεδομένων.
// Επανάληψη όλων των στηλών του πίνακα '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";
}

// Ανάκτηση μιας συγκεκριμένης στήλης
$idColumn = $table->getColumn('id');

Δείκτες και πρωτεύοντα κλειδιά

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

Επιστρέφει έναν πίνακα αντικειμένων Nette\Database\Reflection\Index που αντιπροσωπεύουν τους δείκτες του πίνακα.

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

Επιστρέφει το αντικείμενο Nette\Database\Reflection\Index που αντιπροσωπεύει το δεδομένο δείκτη. Εάν το ευρετήριο δεν υπάρχει, πετάει μια εξαίρεση Nette\Database\Exception\MissingIndexException.

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

Επιστρέφει το αντικείμενο Nette\Database\Reflection\Index που αντιπροσωπεύει το πρωτεύον κλειδί του πίνακα ή το null εάν ο πίνακας δεν έχει πρωτεύον κλειδί.

Το αντικείμενο Index παρέχει τις ακόλουθες ιδιότητες:

  • name: Το όνομα του δείκτη.
  • columns: Ένας πίνακας αντικειμένων Nette\Database\Reflection\Column που αναπαριστούν τις στήλες που αποτελούν μέρος του ευρετηρίου.
  • unique: true εάν το ευρετήριο είναι μοναδικό, διαφορετικά false.
  • primary: true αν το ευρετήριο είναι το πρωτεύον κλειδί, διαφορετικά false.
$table = $reflection->getTable('users');

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

// Λίστα όλων των ευρετηρίων
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";
}

// Ανάκτηση του πρωτεύοντος κλειδιού
if ($primaryKey = $table->getPrimaryKey()) {
	echo "Primary key: " . $printColumnNames($primaryKey->columns) . "\n";
}

Ξένα κλειδιά

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

Επιστρέφει έναν πίνακα αντικειμένων Nette\Database\Reflection\ForeignKey που αντιπροσωπεύουν τα ξένα κλειδιά του πίνακα.

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

Επιστρέφει το αντικείμενο Nette\Database\Reflection\ForeignKey που αντιπροσωπεύει το συγκεκριμένο ξένο κλειδί. Εάν το ξένο κλειδί δεν υπάρχει, πετάει μια εξαίρεση Nette\Database\Exception\MissingForeignKeyException.

Το αντικείμενο ForeignKey παρέχει τις ακόλουθες ιδιότητες:

  • name: Το όνομα του ξένου κλειδιού.
  • localColumns: Ένας πίνακας αντικειμένων Nette\Database\Reflection\Column που αντιπροσωπεύουν τις τοπικές στήλες που αποτελούν το ξένο κλειδί.
  • foreignTable: Ένα αντικείμενο Nette\Database\Reflection\Table που αναπαριστά τον ξένο πίνακα στον οποίο αναφέρεται το ξένο κλειδί.
  • foreignColumns: Ένας πίνακας αντικειμένων Nette\Database\Reflection\Column που αναπαριστούν τις ξένες στήλες στις οποίες αναφέρεται το ξένο κλειδί.
$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";
}