Ver índice de contenidos del libro

8.5. Conexiones con la base de datos

Aunque el modelo de datos es independiente de la base de datos utilizada, es necesario utilizar una base de datos concreta. La información mínima que necesita Symfony para realizar peticiones a la base de datos es su nombre, las credenciales para acceder (usuario, contraseña) y el tipo de base de datos. Las opciones de conexión se pueden configurar pasando un DSN data source name) a la tarea configure:database:

$ php symfony configure:database "mysql:host=localhost;dbname=blog" root mi_password

Los datos de conexión dependen del entorno de ejecución. Se pueden definir diferentes opciones para los entornos prod, dev y test y para cualquier otro entorno de la aplicación utilizando la opción env:

$ php symfony configure:database --env=dev "mysql:host=localhost;dbname=blog_dev" rootmi_password

Cada aplicación también puede redefinir esta configuración, lo que es útil cuando se quiere disponer de diferentes políticas de seguridad para el frontal y para la parte de administración de la aplicación. De esta forma, es posible disponer de diferentes usuarios de base de datos con privilegios diferentes para cada aplicación:

$ php symfony configure:database --app=frontend "mysql:host=localhost;dbname=blog" root mi_password

En cada entorno también es posible definir varias conexiones diferentes. El nombre de la conexión por defecto es doctrine. La opción name permite crear una nueva conexión:

$ php symfony configure:database --name=otra_conexion "mysql:host=localhost;dbname=example" root mi_password

Las opciones de conexión con la base de datos también se pueden establecer manualmente en el archivo databases.yml que se encuentra en el directorio config/. El listado 8-17 muestra un ejemplo de ese archivo y el listado 8-18 muestra el mismo ejemplo con la notación extendida.

Listado 8-17 - Opciones abreviadas de conexión con la base de datos

all:
  doctrine:
    class:          sfDoctrineDatabase
    param:
      dsn:          mysql://login:[email protected]/blog

Listado 8-18 - Ejemplo de opciones de conexión con la base de datos, en miproyecto/config/databases.yml

prod:
  doctrine:
    param:
      dsn:        mysql:dbname=blog;host=localhost
      username:   login
      password:   passwd
      attributes:
        quote_identifier: false
        use_native_enum: false
        validate: all
        idxname_format: %s_idx
        seqname_format: %s_seq
        tblname_format: %s

Si quieres redefinir esta configuración a nivel de aplicación, debes crear un archivo específico para esa aplicación, como por ejemplo apps/frontend/config/databases.yml.

Si quieres utilizar una base de datos de tipo SQLite, el parámetro dsn debe indicar la ruta al archivo de base de datos. Si por ejemplo se guarda la base de datos del blog en el archivo data/blog.db, las opciones del archivo databases.yml serán las del listado 8-19.

Listado 8-19 - Opciones de conexión con una base de datos SQLite utilizando la ruta al archivo como host

all:
  doctrine:
    class:          sfDoctrineDatabase
    param:
      database:     sqlite:///%SF_DATA_DIR%/blog.db