mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-02 21:41:19 +08:00
Update db-dao.md in guide-es [skip ci]
This commit is contained in:
@ -3,11 +3,11 @@
|
||||
|
||||
> Nota: Esta sección está en desarrollo.
|
||||
|
||||
Yii incluye una capa de acceso a bases de datos basado en el [PDO](http://php.net/manual/es/book.pdo.php) de PHP. La
|
||||
interfaz de objetos de acceso a bases de datos (DAO) proporciona una API uniforme y soluciona algunas inconsistencias
|
||||
que existen entre diferentes aplicaciones de bases de datos. Mientras el Active Record proporciona interacciones con
|
||||
los modelos, y el Constructor de Consultas (Query Builder) ayuda en la composición de consultas dinámicas, DAO es una
|
||||
manera simple y eficiente para ejecutar SQL en la base de datos. Por lo general, se usará DAO cuando la ejecución de
|
||||
Yii incluye una capa de acceso a bases de datos basado en el [PDO](http://php.net/manual/es/book.pdo.php) de PHP. La
|
||||
interfaz de objetos de acceso a bases de datos (DAO) proporciona una API uniforme y soluciona algunas inconsistencias
|
||||
que existen entre diferentes aplicaciones de bases de datos. Mientras el Active Record proporciona interacciones con
|
||||
los modelos, y el Constructor de Consultas (Query Builder) ayuda en la composición de consultas dinámicas, DAO es una
|
||||
manera simple y eficiente para ejecutar SQL en la base de datos. Por lo general, se usará DAO cuando la ejecución de
|
||||
la consulta sea muy costosa y/o no se requieran modelos de aplicación y sus correspondientes lógicas de negocio.
|
||||
|
||||
De forma predeterminada, Yii soporta los siguientes DBMS (Sistemas de Gestión de Base de Datos):
|
||||
@ -16,17 +16,17 @@ De forma predeterminada, Yii soporta los siguientes DBMS (Sistemas de Gestión d
|
||||
- [MariaDB](https://mariadb.com/)
|
||||
- [SQLite](http://sqlite.org/)
|
||||
- [PostgreSQL](http://www.postgresql.org/)
|
||||
- [CUBRID](http://www.cubrid.org/): versión 9.3 o superior. (Tenga en cuenta que debido al
|
||||
[bug](http://jira.cubrid.org/browse/APIS-658) en la extensión PDO de cubrid, los valores entrecomillados no
|
||||
- [CUBRID](http://www.cubrid.org/): versión 9.3 o superior. (Tenga en cuenta que debido al
|
||||
[bug](http://jira.cubrid.org/browse/APIS-658) en la extensión PDO de cubrid, los valores entrecomillados no
|
||||
funcionarán, por lo que se necesita CUBRID 9.3 tanto para el cliente como para el servidor)
|
||||
- [Oracle](http://www.oracle.com/us/products/database/overview/index.html)
|
||||
- [MSSQL](https://www.microsoft.com/en-us/sqlserver/default.aspx): versión 2005 o superior.
|
||||
- [MSSQL](https://www.microsoft.com/en-us/sqlserver/default.aspx): versión 2008 o superior.
|
||||
|
||||
Configuración
|
||||
-------------
|
||||
|
||||
Para empezar a interaccionar con la base de datos (usando DAO o de otra forma), se tiene que configurar el componente
|
||||
de conexión a la base de datos de la aplicación. El DSN (Nombre de Origen de Datos) configura que aplicación de BBDD y
|
||||
Para empezar a interaccionar con la base de datos (usando DAO o de otra forma), se tiene que configurar el componente
|
||||
de conexión a la base de datos de la aplicación. El DSN (Nombre de Origen de Datos) configura que aplicación de BBDD y
|
||||
que BBDD especifica debe conectar la aplicación:
|
||||
|
||||
```php
|
||||
@ -53,11 +53,11 @@ return [
|
||||
];
|
||||
```
|
||||
|
||||
Se puede encontrar más información del formato de la cadena DSN en el
|
||||
[manual de PHP](http://php.net/manual/es/pdo.construct.php). Además se puede encontrar el listado completo de
|
||||
Se puede encontrar más información del formato de la cadena DSN en el
|
||||
[manual de PHP](http://php.net/manual/es/pdo.construct.php). Además se puede encontrar el listado completo de
|
||||
propiedades que se pueden configurar en la clase en [[yii\db\Connection]].
|
||||
|
||||
Hay que tener en cuenta que si se conecta a una base de datos mediante ODBC, se debe configurar la propiedad
|
||||
Hay que tener en cuenta que si se conecta a una base de datos mediante ODBC, se debe configurar la propiedad
|
||||
[[yii\db\Connection::driverName]] para que Yii sepa el tipo de bases de datos actual. Por ejemplo,
|
||||
|
||||
```php
|
||||
@ -70,8 +70,8 @@ Hay que tener en cuenta que si se conecta a una base de datos mediante ODBC, se
|
||||
],
|
||||
```
|
||||
|
||||
Se puede acceder a la conexión `db` primaria mediante la expresión `\Yii::$app->db`. También se pueden configurar
|
||||
múltiples conexiones de BBDD en una única aplicación. Simplemente asignándoles diferentes IDs en la configuración de
|
||||
Se puede acceder a la conexión `db` primaria mediante la expresión `\Yii::$app->db`. También se pueden configurar
|
||||
múltiples conexiones de BBDD en una única aplicación. Simplemente asignándoles diferentes IDs en la configuración de
|
||||
la aplicación:
|
||||
|
||||
```php
|
||||
@ -81,14 +81,14 @@ return [
|
||||
// ...
|
||||
'db' => [
|
||||
'class' => 'yii\db\Connection',
|
||||
'dsn' => 'mysql:host=localhost;dbname=mydatabase',
|
||||
'dsn' => 'mysql:host=localhost;dbname=mydatabase',
|
||||
'username' => 'root',
|
||||
'password' => '',
|
||||
'charset' => 'utf8',
|
||||
],
|
||||
'secondDb' => [
|
||||
'class' => 'yii\db\Connection',
|
||||
'dsn' => 'sqlite:/path/to/database/file',
|
||||
'dsn' => 'sqlite:/path/to/database/file',
|
||||
],
|
||||
],
|
||||
// ...
|
||||
@ -102,7 +102,7 @@ $primaryConnection = \Yii::$app->db;
|
||||
$secondaryConnection = \Yii::$app->secondDb;
|
||||
```
|
||||
|
||||
Si no se quiere definir la conexión como un [componente de aplicación](structure-application-components.md), se puede
|
||||
Si no se quiere definir la conexión como un [componente de aplicación](structure-application-components.md), se puede
|
||||
instanciar directamente:
|
||||
|
||||
```php
|
||||
@ -114,8 +114,8 @@ $connection = new \yii\db\Connection([
|
||||
$connection->open();
|
||||
```
|
||||
|
||||
> Tip: Si se necesita ejecutar una consulta SQL inmediatamente después de establecer la conexión
|
||||
(p. ej. para establecer la zona horaria (timezone) o juego de caracteres), se puede añadir el siguiente código en el
|
||||
> Consejo: Si se necesita ejecutar una consulta SQL inmediatamente después de establecer la conexión
|
||||
(ej. para establecer la zona horaria (timezone) o el juego de caracteres), se puede añadir el siguiente código en el
|
||||
archivo de configuración de la aplicación:
|
||||
>
|
||||
```php
|
||||
@ -135,7 +135,7 @@ return [
|
||||
];
|
||||
```
|
||||
|
||||
Ejecución de Consultas SQL Basicas
|
||||
Ejecución de Consultas SQL Básicas
|
||||
----------------------------------
|
||||
|
||||
Una vez instanciada una conexión a la base de datos, se pueden ejecutar consultas SQL usando [[yii\db\Command]].
|
||||
@ -179,8 +179,8 @@ $command = $connection->createCommand('UPDATE post SET status=1 WHERE id=1');
|
||||
$command->execute();
|
||||
```
|
||||
|
||||
De forma alternativa, se pueden usar los métodos `insert`, `update`, y `delete`. Estos métodos se encargarán de
|
||||
gestionar entrecomillar adecuadamente el nombre de la tabla y de las columnas que se usen en la consulta, y solo se
|
||||
De forma alternativa, se pueden usar los métodos `insert`, `update`, y `delete`. Estos métodos se encargarán de
|
||||
gestionar el entrecomillado de los nombres de la tablas y de las columnas que se usen en la consulta, y solo se
|
||||
tendrá que proporcionar los valores necesarios.
|
||||
|
||||
[[Se tiene que poner el enlace de documentación aquí.]]
|
||||
@ -206,10 +206,10 @@ $connection->createCommand()->update('user', ['status' => 1], 'age > 30')->execu
|
||||
$connection->createCommand()->delete('user', 'status = 0')->execute();
|
||||
```
|
||||
|
||||
Entrecomillado de Nombre de Tablas y Columnas
|
||||
---------------------------------------------
|
||||
Entrecomillado de los Nombres de las Tablas y las Columnas <a name="quoting-table-and-column-names"></a>
|
||||
----------------------------------------------------------
|
||||
|
||||
Para hacer que los nombres de columnas y tablas sean seguros para usarse en consultas, se puede utilizar Yii
|
||||
Para hacer que los nombres de las columnas y las tablas sean seguros para usarse en las consultas, se puede utilizar Yii
|
||||
adecuadamente para que los entrecomille:
|
||||
|
||||
```php
|
||||
@ -217,10 +217,10 @@ $sql = "SELECT COUNT([[$column]]) FROM {{table}}";
|
||||
$rowCount = $connection->createCommand($sql)->queryScalar();
|
||||
```
|
||||
|
||||
En el código anterior, se convertirá `[[$column]]` a un nombre de columna debidamente entrecomillado, mientras que se
|
||||
En el código anterior, se convertirá `[[$column]]` a un nombre de columna debidamente entrecomillado, mientras que se
|
||||
convertirá `{{table}}` a un nombre de tabla debidamente entrecomillado.
|
||||
|
||||
Hay una variante especial de esta sintaxis especifica para que los nombres de tablas: `{{%Y}}` añade automáticamente
|
||||
Hay una variante especial de esta sintaxis especifica para que los nombres de las tablas: `{{%Y}}` añade automáticamente
|
||||
el prefijo de la tabla de la aplicación para proporcionar un valor, si se ha establecido un prefijo de tabla:
|
||||
|
||||
```php
|
||||
@ -228,7 +228,7 @@ $sql = "SELECT COUNT([[$column]]) FROM {{%table}}";
|
||||
$rowCount = $connection->createCommand($sql)->queryScalar();
|
||||
```
|
||||
|
||||
El código anterior dará como resultado una consulta de selección de la tabla `tbl_table`, si se tiene el prefijo de
|
||||
El código anterior dará como resultado una consulta de selección de la tabla `tbl_table`, si se tiene el prefijo de
|
||||
tabla configurado como el siguiente:
|
||||
|
||||
```php
|
||||
@ -244,7 +244,7 @@ return [
|
||||
];
|
||||
```
|
||||
|
||||
La alternativa es entrecomillar los nombres de tabla y columna manualmente usando
|
||||
La alternativa es entrecomillar los nombres de las tablas y las columnas manualmente usando
|
||||
[[yii\db\Connection::quoteTableName()]] y [[yii\db\Connection::quoteColumnName()]]:
|
||||
|
||||
```php
|
||||
@ -257,8 +257,8 @@ $rowCount = $connection->createCommand($sql)->queryScalar();
|
||||
Uso de Sentencias Preparadas
|
||||
----------------------------
|
||||
|
||||
Para pasar parámetros seguros a las consultas, se deben usar las sentencias preparadas. Primero, se tiene que crear un
|
||||
*parámetro de substitución* (placeholder) en una consulta (usando la sintaxis `:placeholder`). Después intercambiar el
|
||||
Para pasar parámetros seguros a las consultas, se deben usar las sentencias preparadas. Primero, se tiene que crear un
|
||||
*parámetro de substitución* (placeholder) en una consulta (usando la sintaxis `:placeholder`). Después intercambiar el
|
||||
parámetro de substitución por una variable y ejecutar la consulta:
|
||||
|
||||
```php
|
||||
@ -267,7 +267,7 @@ $command->bindValue(':id', $_GET['id']);
|
||||
$post = $command->queryOne();
|
||||
```
|
||||
|
||||
Otra finalidad de las sentencias preparadas (aparte de mejorar la seguridad) es la habilidad de ejecutar una consulta
|
||||
Otra finalidad de las sentencias preparadas (aparte de mejorar la seguridad) es la habilidad de ejecutar una consulta
|
||||
múltiples veces mientras que sólo se ha preparado una vez:
|
||||
|
||||
```php
|
||||
@ -281,17 +281,17 @@ $id = 2;
|
||||
$command->execute();
|
||||
```
|
||||
|
||||
Tenga en cuenta que se efectúa la asignación del parámetro de substitución antes de su ejecución, y después se cambia
|
||||
el valor antes de la siguiente ejecución (normalmente se ejecuta en bucles). La ejecución de consultas con este
|
||||
Tenga en cuenta que se efectúa la asignación del parámetro de substitución antes de su ejecución, y después se cambia
|
||||
el valor antes de la siguiente ejecución (normalmente se ejecuta en bucles). La ejecución de consultas con este
|
||||
método, puede ser mucho más eficiente que la ejecución de una consulta cada vez.
|
||||
|
||||
Realización de Transacciones
|
||||
----------------------------
|
||||
|
||||
Cuando se ejecutan múltiples, consultas relacionadas en una secuencia, puede que se tengan que envolver en una
|
||||
transacción para proteger la integridad de los datos. Las transacciones permiten escribir una serie de consultas de
|
||||
forma que o todas se ejecutan correctamente o no tendrán ningún efecto. Yii proporciona una interfaz sencilla para
|
||||
trabajar con transacciones en casos simples pero también para el uso avanzado cuando tengan que definir los niveles de
|
||||
Cuando se ejecutan múltiples, consultas relacionadas en una secuencia, puede que se tengan que envolver en una
|
||||
transacción para proteger la integridad de los datos. Las transacciones permiten escribir una serie de consultas de
|
||||
forma que o todas se ejecutan correctamente o no tendrán ningún efecto. Yii proporciona una interfaz sencilla para
|
||||
trabajar con transacciones en casos simples pero también para el uso avanzado cuando tengan que definir los niveles de
|
||||
aislamiento.
|
||||
|
||||
El siguiente código muestra un patrón simple que debe seguir todo código que utilice consultas transaccionales:
|
||||
@ -309,13 +309,13 @@ try {
|
||||
}
|
||||
```
|
||||
|
||||
La primera linea empieza una nueva transacción usando el método
|
||||
[[yii\db\Connection::beginTransaction()|beginTransaction()]] del objeto de conexión a la base de datos. La transacción
|
||||
en si misma se representa con el objeto [[yii\db\Transaction]] almacenado en `$transaction`. Nosotros encapsulamos la
|
||||
ejecución de todas las consultas en un bloque try-catch para poder gestionar los errores. Llamamos a
|
||||
[[yii\db\Transaction::commit()|commit()]] cuando todo es correcto para efectuar la transacción y si sucede algún error
|
||||
ejecutamos [[yii\db\Transaction::rollBack()|rollBack()]]. Esto revertirá el efecto de todas las consultas que se hayan
|
||||
ejecutado dentro de la transacción. Se usa `throw $e` para relanzar la excepción en caso de que nosotros no podamos
|
||||
La primera linea empieza una nueva transacción usando el método
|
||||
[[yii\db\Connection::beginTransaction()|beginTransaction()]] del objeto de conexión a la base de datos. La transacción
|
||||
en si misma se representa con el objeto [[yii\db\Transaction]] almacenado en `$transaction`. Nosotros encapsulamos la
|
||||
ejecución de todas las consultas en un bloque try-catch para poder gestionar los errores. Llamamos a
|
||||
[[yii\db\Transaction::commit()|commit()]] cuando todo es correcto para efectuar la transacción y si sucede algún error
|
||||
ejecutamos [[yii\db\Transaction::rollBack()|rollBack()]]. Esto revertirá el efecto de todas las consultas que se hayan
|
||||
ejecutado dentro de la transacción. Se usa `throw $e` para relanzar la excepción en caso de que nosotros no podamos
|
||||
gestionar el error y se delega a otro código del gestor de errores de Yii.
|
||||
|
||||
Es posible anidar múltiples transacciones si es necesario:
|
||||
@ -341,13 +341,13 @@ try {
|
||||
}
|
||||
```
|
||||
|
||||
Tenga en cuanta que el DBMS debe soportar Puntos de Registro (Savepoints) para que funcionen correctamente. El código
|
||||
anterior, trabajará con cualquier DBMS pero las sólo se garantizarán las transacciones que se ejecuten bajo un DBMS
|
||||
Tenga en cuanta que el DBMS debe soportar Puntos de Registro (Savepoints) para que funcionen correctamente. El código
|
||||
anterior, trabajará con cualquier DBMS pero sólo se garantizarán las transacciones que se ejecuten bajo un DBMS
|
||||
que las soporte.
|
||||
|
||||
Yii también soporta la configuración de [niveles de aislamiento] en las transacciones. Cuando empiece una transacción
|
||||
se ejecutará con el nivel predeterminado de aislamiento definido por la base de datos. Se puede especificar un nivel
|
||||
de aislamiento especifico cuando se empieza una transacción:
|
||||
Yii también soporta la configuración de [niveles de aislamiento] en las transacciones. Cuando empiece una transacción
|
||||
se ejecutará con el nivel predeterminado de aislamiento definido por la base de datos. Se puede especificar un nivel
|
||||
de aislamiento específico cuando se empieza una transacción:
|
||||
|
||||
```php
|
||||
$transaction = $connection->beginTransaction(\yii\db\Transaction::REPEATABLE_READ);
|
||||
@ -355,41 +355,41 @@ $transaction = $connection->beginTransaction(\yii\db\Transaction::REPEATABLE_REA
|
||||
|
||||
Yii proporciona cuatro constantes para los niveles de aislamiento más comunes:
|
||||
|
||||
- [[\yii\db\Transaction::READ_UNCOMMITTED]] - el nivel más bajo, pueden ocurrir lecturas Dirty, lecturas
|
||||
- [[\yii\db\Transaction::READ_UNCOMMITTED]] - el nivel más bajo, pueden ocurrir lecturas Dirty, lecturas
|
||||
Non-repeatable y Phantoms.
|
||||
- [[\yii\db\Transaction::READ_COMMITTED]] - evita lecturas Dirty.
|
||||
- [[\yii\db\Transaction::REPEATABLE_READ]] - evita lecturas Dirty y lecturas Non-repeatable.
|
||||
- [[\yii\db\Transaction::SERIALIZABLE]] - el nivel más fuerte, evita todos los problemas nombrados anteriormente.
|
||||
|
||||
Se pueden usar las constantes descritas anteriormente aunque también se pueden usar cadenas de texto que representen
|
||||
la sintaxis que puede ser utilizada en el DBMS seguido de `SET TRANSACTION ISOLATION LEVEL`. Para postgres podría
|
||||
Se pueden usar las constantes descritas anteriormente aunque también se pueden usar cadenas de texto que representen
|
||||
la sintaxis que puede ser utilizada en el DBMS seguido de `SET TRANSACTION ISOLATION LEVEL`. Para postgres podría
|
||||
utilizarse, por ejemplo, `SERIALIZABLE READ ONLY DEFERRABLE`.
|
||||
|
||||
Tenga en cuenta que algunos DBMS permiten configuraciones de niveles de aislamiento solo a nivel de conexión y por
|
||||
consiguiente las transacciones pueden obtener el mismo nivel de aislamiento incluso si no se especifica ninguno.
|
||||
Cuando se usa esta característica, se puede tener que establecer el nivel de aislamiento explícitamente para evitar
|
||||
Tenga en cuenta que algunos DBMS permiten configuraciones de niveles de aislamiento solo a nivel de conexión y por
|
||||
consiguiente las transacciones pueden obtener el mismo nivel de aislamiento incluso si no se especifica ninguno.
|
||||
Cuando se usa esta característica, se puede tener que establecer el nivel de aislamiento explícitamente para evitar
|
||||
conflictos de configuración. En este momento se ven afectados los DBMS MSSQL y SQLite.
|
||||
|
||||
> NOTA: SQLite solo soporta dos niveles de aislamiento, por lo que solo se puede usar `READ UNCOMMITTED` y
|
||||
> NOTA: SQLite solo soporta dos niveles de aislamiento, por lo que solo se puede usar `READ UNCOMMITTED` y
|
||||
`SERIALIZABLE`. El uso de otros niveles causará el lanzamiento de una excepción.
|
||||
|
||||
> Nota: PostgreSQL no permite configurar el nivel de aislamiento antes que la transacción empiece por lo que no se
|
||||
puede especificar el nivel de aislamiento directamente cuando empieza la transacción. Se tiene que ejecutar
|
||||
> Nota: PostgreSQL no permite configurar el nivel de aislamiento antes que la transacción empiece por lo que no se
|
||||
puede especificar el nivel de aislamiento directamente cuando empieza la transacción. Se tiene que ejecutar
|
||||
[[yii\db\Transaction::setIsolationLevel()]] después de que la transacción haya empezado.
|
||||
|
||||
[isolation levels]: http://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Isolation_levels
|
||||
|
||||
Replicas y División Lectura-Escritura
|
||||
Réplicas y División Lectura-Escritura
|
||||
-------------------------------------
|
||||
|
||||
Muchos DBMS soportan
|
||||
[replicación de bases de datos](http://en.wikipedia.org/wiki/Replication_(computing)#Database_replication) para tener
|
||||
una mejor disponibilidad de la base de datos y un mejor tiempo de respuesta del servidor. Con la replicación de bases
|
||||
de datos, los datos están replicados en los llamados *servidores maestros* (master servers) y *servidores esclavos*
|
||||
(slave servers). Todas las escrituras y actualizaciones deben hacerse en el servidor maestro mientras que las lecturas
|
||||
Muchos DBMS soportan
|
||||
[replicación de bases de datos](http://en.wikipedia.org/wiki/Replication_(computing)#Database_replication) para tener
|
||||
una mejor disponibilidad de la base de datos y un mejor tiempo de respuesta del servidor. Con la replicación de bases
|
||||
de datos, los datos están replicados en los llamados *servidores maestros* (master servers) y *servidores esclavos*
|
||||
(slave servers). Todas las escrituras y actualizaciones deben hacerse en el servidor maestro mientras que las lecturas
|
||||
se efectuarán en los servidores esclavos.
|
||||
|
||||
Para aprovechar las ventajas de la replicación de BBDD y lograr una división de lecuta-escritura, se puede configurar
|
||||
Para aprovechar las ventajas de la replicación de BBDD y lograr una división de lecuta-escritura, se puede configurar
|
||||
el componente [[yii\db\Connection]] como se muestra a continuación:
|
||||
|
||||
```php
|
||||
@ -406,7 +406,7 @@ el componente [[yii\db\Connection]] como se muestra a continuación:
|
||||
'username' => 'slave',
|
||||
'password' => '',
|
||||
'attributes' => [
|
||||
// use a smaller connection timeout
|
||||
// utiliza un tiempo de espera de conexión más pequeña
|
||||
PDO::ATTR_TIMEOUT => 10,
|
||||
],
|
||||
],
|
||||
@ -421,8 +421,8 @@ el componente [[yii\db\Connection]] como se muestra a continuación:
|
||||
]
|
||||
```
|
||||
|
||||
La configuración anterior especifica una configuración con un único maestro y múltiples esclavos. Uno de los esclavos
|
||||
se conectará y se usará para ejecutar consultas de lectura mientras que el maestro se usara para realizar consultas de
|
||||
La configuración anterior especifica una configuración con un único maestro y múltiples esclavos. Uno de los esclavos
|
||||
se conectará y se usará para ejecutar consultas de lectura mientras que el maestro se usará para realizar consultas de
|
||||
escritura. De este modo la división de lectura-escritura se logra automáticamente con esta configuración, Por ejemplo,
|
||||
|
||||
```php
|
||||
@ -436,19 +436,19 @@ $rows = $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();
|
||||
$db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
|
||||
```
|
||||
|
||||
> Información: Las consultas realizadas ejecutando [[yii\db\Command::execute()]] se consideran consultas de escritura,
|
||||
mientras que todas las demás se ejecutan mediante alguno de los métodos "query" de [[yii\db\Command]] son consultas
|
||||
> Información: Las consultas realizadas ejecutando [[yii\db\Command::execute()]] se consideran consultas de escritura,
|
||||
mientras que todas las demás se ejecutan mediante alguno de los métodos "query" de [[yii\db\Command]] son consultas
|
||||
de lectura. Se puede obtener la conexión de esclavo activa mediante `$db->slave`.
|
||||
|
||||
El componente `Connection` soporta el balanceo de carga y la conmutación de errores entre esclavos. Cuando se realiza
|
||||
una consulta de lectura por primera vez, el componente `Connection` elegirá un esclavo aleatorio e intentará realizar
|
||||
una conexión a este. Si está "muerto", se intentara con otro. Si no está disponible ningún esclavo, se conectará al
|
||||
maestro. Configurando una [[yii\db\Connection::serverStatusCache|server status cache]], se recordarán los servidores
|
||||
"muertos" por lo que no se intentará volver a conectar a ellos durante
|
||||
El componente `Connection` soporta el balanceo de carga y la conmutación de errores entre esclavos. Cuando se realiza
|
||||
una consulta de lectura por primera vez, el componente `Connection` elegirá un esclavo aleatorio e intentará realizar
|
||||
una conexión a este. Si está "muerto", se intentará con otro. Si no está disponible ningún esclavo, se conectará al
|
||||
maestro. Configurando una [[yii\db\Connection::serverStatusCache|server status cache]], se recordarán los servidores
|
||||
"muertos" por lo que no se intentará volver a conectar a ellos durante
|
||||
[[yii\db\Connection::serverRetryInterval|certain period of time]].
|
||||
|
||||
> Información: En la configuración anterior, se especifica un tiempo de espera (timeout) de conexión de 10 segundos
|
||||
para cada esclavo. Esto significa que si no se puede conectar a un esclavo en 10 segundos, este será considerado
|
||||
> Información: En la configuración anterior, se especifica un tiempo de espera (timeout) de conexión de 10 segundos
|
||||
para cada esclavo. Esto significa que si no se puede conectar a un esclavo en 10 segundos, este será considerado
|
||||
como "muerto". Se puede ajustar el parámetro basado en el entorno actual.
|
||||
|
||||
También se pueden configurar múltiples parámetros para múltiples esclavos. Por ejemplo,
|
||||
@ -462,7 +462,7 @@ También se pueden configurar múltiples parámetros para múltiples esclavos. P
|
||||
'username' => 'master',
|
||||
'password' => '',
|
||||
'attributes' => [
|
||||
// use a smaller connection timeout
|
||||
// utilizar un tiempo de espera de conexión más pequeña
|
||||
PDO::ATTR_TIMEOUT => 10,
|
||||
],
|
||||
],
|
||||
@ -478,7 +478,7 @@ También se pueden configurar múltiples parámetros para múltiples esclavos. P
|
||||
'username' => 'slave',
|
||||
'password' => '',
|
||||
'attributes' => [
|
||||
// use a smaller connection timeout
|
||||
// utilizar un tiempo de espera de conexión más pequeña
|
||||
PDO::ATTR_TIMEOUT => 10,
|
||||
],
|
||||
],
|
||||
@ -493,15 +493,15 @@ También se pueden configurar múltiples parámetros para múltiples esclavos. P
|
||||
]
|
||||
```
|
||||
|
||||
La configuración anterior especifica dos maestros y cuatro esclavos. El componente `Connection` también da soporte al
|
||||
balanceo de carga y la conmutación de errores entre maestros igual que hace con los esclavos. La diferencia es que
|
||||
La configuración anterior especifica dos maestros y cuatro esclavos. El componente `Connection` también da soporte al
|
||||
balanceo de carga y la conmutación de errores entre maestros igual que hace con los esclavos. La diferencia es que
|
||||
cuando no se encuentra ningún maestro disponible se lanza una excepción.
|
||||
|
||||
> Nota: cuando se usa la propiedad [[yii\db\Connection::masters|masters]] para configurar uno o múltiples maestros, se
|
||||
ignorarán todas las otras propiedades que especifiquen una conexión de base de datos
|
||||
(p. ej. `dsn`, `username`, `password`), junto con el mismo objeto `Connection`.
|
||||
> Nota: cuando se usa la propiedad [[yii\db\Connection::masters|masters]] para configurar uno o múltiples maestros, se
|
||||
ignorarán todas las otras propiedades que especifiquen una conexión de base de datos
|
||||
(ej. `dsn`, `username`, `password`), junto con el mismo objeto `Connection`.
|
||||
|
||||
Las conexiones usan la conexión de maestro de forma predeterminada. Y todas las operaciones de BBDD que estén dentro
|
||||
Las conexiones usan la conexión de maestro de forma predeterminada. Y todas las operaciones de BBDD que estén dentro
|
||||
de una transacción, usaran la conexión de maestro. Por ejemplo,
|
||||
|
||||
```php
|
||||
@ -520,14 +520,14 @@ try {
|
||||
}
|
||||
```
|
||||
|
||||
Si se quiere empezar la conexión con una conexión a un esclavo, se debe hacer explícitamente como se muestra a
|
||||
Si se quiere empezar la conexión con una conexión a un esclavo, se debe hacer explícitamente como se muestra a
|
||||
continuación:
|
||||
|
||||
```php
|
||||
$transaction = $db->slave->beginTransaction();
|
||||
```
|
||||
|
||||
A veces, se puede querer forzar el uso de una conexión maestra para realizar una consulta de lectura. Se puede lograr
|
||||
A veces, se puede querer forzar el uso de una conexión maestra para realizar una consulta de lectura. Se puede lograr
|
||||
usando el método `useMaster()`:
|
||||
|
||||
```php
|
||||
@ -536,7 +536,7 @@ $rows = $db->useMaster(function ($db) {
|
||||
});
|
||||
```
|
||||
|
||||
También se puede utilizar directamente estableciendo `$db->enableSlaves` a `false` para que se redirijan todas las
|
||||
También se puede utilizar directamente estableciendo `$db->enableSlaves` a `false` para que se redirijan todas las
|
||||
consultas a la conexión de maestro.
|
||||
|
||||
Trabajar con Esquemas de Bases de Datos
|
||||
@ -560,7 +560,7 @@ Para hacer referencia al esquema entero, se puede revisar [[yii\db\Schema]].
|
||||
|
||||
### Modificación de esquemas
|
||||
|
||||
Aparte de consultas SQL basicas, [[yii\db\Command]] contiene un conjunto de métodos que permiten modificar el esquema
|
||||
Aparte de consultas SQL básicas, [[yii\db\Command]] contiene un conjunto de métodos que permiten modificar el esquema
|
||||
de la base de datos:
|
||||
|
||||
- createTable, renameTable, dropTable, truncateTable
|
||||
@ -572,7 +572,7 @@ de la base de datos:
|
||||
Que pueden usarse como se muestra a continuación:
|
||||
|
||||
```php
|
||||
// CREATE TABLE
|
||||
// CREAR TABLA
|
||||
$connection->createCommand()->createTable('post', [
|
||||
'id' => 'pk',
|
||||
'title' => 'string',
|
||||
|
||||
Reference in New Issue
Block a user