El DoctrineServiceProvider proporciona integración con el DBAL de Doctrine para acceder fácilmente a la base de datos.
Nota
Sólo hay una DBAL de Doctrine. No se suministra un servicio ORM.
db.options: Arreglo de opciones para DBAL de Doctrine.
Estas opciones están disponibles:
Estas y otras opciones se describen en detalle en la documentación de configurando el DBAL de Doctrine.
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_sqlite',
'path' => __DIR__.'/app.db',
),
));
Nota
El DBAL de Doctrine viene con el archivo “gordo” de Silex pero no en el normal. Si estás usando Composer, añádelo como dependencia en tu archivo composer.json:
"require": {
"doctrine/dbal": "2.2.*",
}
El proveedor Doctrine proporciona un servicio db. Aquí está un ejemplo de uso:
$app->get('/blog/show/{id}', function ($id) use ($app) {
$sql = "SELECT * FROM posts WHERE id = ?";
$post = $app['db']->fetchAssoc($sql, array((int) $id));
return "<h1>{$post['title']}</h1>".
"<p>{$post['body']}</p>";
});
El proveedor Doctrine te permite acceder a múltiples bases de datos. Para configurar tus fuentes de datos, sustituye db.options con dbs.options. dbs.options es un arreglo de configuraciones donde las claves son los nombres de las conexiones y los valores son las opciones:
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'dbs.options' => array (
'mysql_read' => array(
'driver' => 'pdo_mysql',
'host' => 'mysql_read.someplace.tld',
'dbname' => 'my_database',
'user' => 'my_username',
'password' => 'my_password',
'charset' => 'utf8',
),
'mysql_write' => array(
'driver' => 'pdo_mysql',
'host' => 'mysql_write.someplace.tld',
'dbname' => 'my_database',
'user' => 'my_username',
'password' => 'my_password',
'charset' => 'utf8',
),
),
));
La primer conexión registrada es la predeterminada y puedes acceder a ella como lo harías si hubiera una sola conexión. Teniendo en cuenta la configuración anterior, estas dos líneas son equivalentes:
$app['db']->fetchAssoc('SELECT * FROM table');
$app['dbs']['mysql_read']->fetchAssoc('SELECT * FROM table');
Usando múltiples conexiones:
$app->get('/blog/show/{id}', function ($id) use ($app) {
$sql = "SELECT * FROM posts WHERE id = ?";
$post = $app['dbs']['mysql_read']->fetchAssoc($sql, array((int) $id));
$sql = "UPDATE posts SET value = ? WHERE id = ?";
$app['dbs']['mysql_write']->executeUpdate($sql, array('newValue', (int) $id));
return "<h1>{$post['title']}</h1>".
"<p>{$post['body']}</p>";
});
Para más información, consulta la documentación del DBAL de Doctrine.