Configuración de base de datos

Nota

Consulte Bases de datos compatibles para conocer los controladores de bases de datos actualmente compatibles.

Archivo de configuración

Higgs tiene un archivo de configuración que te permite almacenar tu base de datos valores de conexión (nombre de usuario, contraseña, nombre de la base de datos, etc.). La configuración El archivo se encuentra en app/Config/Database.php. También puedes configurar valores de conexión de la base de datos en el archivo .env. Consulte a continuación para obtener más detalles.

Configuración de la base de datos predeterminada

Los ajustes de configuración se almacenan en una propiedad de clase que es una matriz con este prototipo:

<?php

namespace Config;

use Higgs\Database\Config;

class Database extends Config
{
    // ...

    public array $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'database_name',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => true,
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 3306,
    ];

    // ...
}

El nombre de la propiedad de clase es el nombre de la conexión y se puede utilizar mientras se conecta para especificar un nombre de grupo.

Nota

The default location of the SQLite3 database is in the writable folder. Si desea cambiar la ubicación, debe establecer la ruta completa a la nueva carpeta.

DSN

Algunos controladores de bases de datos (como Postgre, OCI8) requieren una cadena DSN completa para conectarse. Pero si no especifica una cadena DSN para un controlador que la requiere, Higgs Intentaremos construirlo con el resto de las configuraciones proporcionadas.

Si especifica un DSN, debe usar la opción de configuración 'DSN', como si estás usando la extensión PHP nativa subyacente del controlador, como esta:

    // OCI8
    public array $default = [
        'DSN' => '//localhost/XE',
        // ...
    ];
DSN de manera universal

También puede establecer un nombre de fuente de datos de manera universal (como una URL). En ese caso los DSN deben tener este prototipo:

    public array $default = [
        'DSN' => 'DBDriver://username:password@hostname:port/database',
        // ...
    ];

Para anular los valores de configuración predeterminados al conectarse con una versión universal de la cadena DSN, agregue las variables de configuración como una cadena de consulta:

    // MySQLi
    public array $default = [
        'DSN' => 'MySQLi://username:password@hostname:3306/database?charset=utf8&DBCollat=utf8_general_ci',
        // ...
    ];
    // Postgre
    public array $default = [
        'DSN' => 'Postgre://username:password@hostname:5432/database?charset=utf8&connect_timeout=5&sslmode=1',
        // ...
    ];

Nota

If you provide a DSN string and it is missing some valid settings (e.g., the conjunto de caracteres de la base de datos), que están presentes en el resto de la configuración campos, Higgs los agregará.

Conmutaciones por error

También puede especificar conmutación por error para la situación en la que la conexión principal no puede conectarse por algún motivo. Estas conmutaciones por error se pueden especificar configurando la conmutación por error para una conexión como esta:

<?php

namespace Config;

use Higgs\Database\Config;

class Database extends Config
{
    // ...

    public array $default = [
        // ...
        'failover' => [
            [
                'hostname' => 'localhost1',
                'username' => '',
                'password' => '',
                'database' => '',
                'DBDriver' => 'MySQLi',
                'DBPrefix' => '',
                'pConnect' => true,
                'DBDebug'  => true,
                'charset'  => 'utf8',
                'DBCollat' => 'utf8_general_ci',
                'swapPre'  => '',
                'encrypt'  => false,
                'compress' => false,
                'strictOn' => false,
            ],
            [
                'hostname' => 'localhost2',
                'username' => '',
                'password' => '',
                'database' => '',
                'DBDriver' => 'MySQLi',
                'DBPrefix' => '',
                'pConnect' => true,
                'DBDebug'  => true,
                'charset'  => 'utf8',
                'DBCollat' => 'utf8_general_ci',
                'swapPre'  => '',
                'encrypt'  => false,
                'compress' => false,
                'strictOn' => false,
            ],
        ],
        // ...
    ];

    // ...
}

Puede especificar tantas conmutaciones por error como desee.

Configuración de múltiples bases de datos

Opcionalmente, puede almacenar varios conjuntos de conexiones. valores. Si, por ejemplo, ejecuta varios entornos (desarrollo, producción, prueba, etc.) bajo una sola instalación, puede configurar un grupo de conexión para cada uno, luego cambie entre grupos según sea necesario. Para Por ejemplo, para configurar un entorno de «prueba», haría esto:

<?php

namespace Config;

use Higgs\Database\Config;

class Database extends Config
{
    // ...

    public array $test = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'database_name',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => true,
        'DBDebug'  => true,
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'compress' => false,
        'encrypt'  => false,
        'strictOn' => false,
        'failover' => [],
    ];

    // ...
}

Luego, para decirle globalmente al sistema que use ese grupo, configuraría esto variable ubicada en el archivo de configuración:

<?php

namespace Config;

use Higgs\Database\Config;

class Database extends Config
{
    // ...

    public string $defaultGroup = 'test';

    // ...
}

Nota

The name test is arbitrary. It can be anything you want. By Por defecto hemos usado la palabra predeterminado para la conexión principal, pero también se le puede cambiar el nombre a algo más relevante para su proyecto.

Cambiar bases de datos automáticamente

Puede modificar el archivo de configuración para detectar el entorno y automáticamente actualice el valor defaultGroup al correcto agregando la lógica requerida dentro del constructor de la clase:

<?php

namespace Config;

use Higgs\Database\Config;

/**
 * Database Configuration
 */
class Database extends Config
{
    // ...
    public $development = [/* ... */];
    public $test        = [/* ... */];
    public $production  = [/* ... */];

    public function __construct()
    {
        // ...

        $this->defaultGroup = ENVIRONMENT;
    }
}

Configurando con el archivo .env

También puede guardar sus valores de configuración dentro de un archivo .env con el servidor actual. configuración de la base de datos. Sólo necesita ingresar los valores que cambian de lo que está en el ajustes de configuración predeterminados del grupo. Los valores deben ser nombre siguiendo este formato, donde predeterminado es el nombre del grupo:

base de datos.default.nombre de usuario = 'raíz&#39;;
base de datos.default.contraseña = '&#39;;
base de datos.default.database = 'H4&#39;;

Pero no puede agregar una nueva propiedad estableciendo variables de entorno, ni cambiar una valor escalar a una matriz. Consulte Variables de Entorno como Reemplazos para Datos para obtener más detalles.

Entonces, si quieres usar SSL con MySQL, necesitas un truco. Por ejemplo, establezca la matriz valores como una cadena JSON en su archivo .env:

base de datos.default.encrypt = {"ssl_verify":true,"ssl_ca":"/var/www/html/BaltimoreCyberTrustRoot.crt.pem"}

y decodificarlo en el constructor de la clase Config:

<?php

namespace Config;

use Higgs\Database\Config;

/**
 * Database Configuration
 */
class Database extends Config
{
    // ...

    public function __construct()
    {
        // ...

        $array = json_decode($this->default['encrypt'], true);
        if (is_array($array)) {
            $this->default['encrypt'] = $array;
        }
    }
}

Explicación de Valores:


Nota

Depending on what database driver you are using (MySQLi, Postgre, etc.) no se necesitarán todos los valores. Por ejemplo, al utilizar SQLite3 No será necesario proporcionar un nombre de usuario o contraseña, y el nombre de la base de datos. será la ruta a su archivo de base de datos.