Table des matières
Cet article est d'environ couche Doctrine de DBAL. En règle générale, vous travaillerez avec la doctrine niveau supérieur couche ORM, qui utilise tout simplement la DBAL dans les coulisses pour réellement communiquer avec la base de données. Pour en savoir plus sur l'ORM Doctrine, voir Bases de données et Doctrine ("Le modèle")
La doctrine de base de données Abstraction Layer (DBAL) voir Introduction Symfony2 est une couche d'abstraction qui se trouve sur le dessus de PDO et offre une API intuitive et flexible pour communiquer avec les bases de données relationnelles les plus populaires. En d'autres termes, la bibliothèque DBAL, il est facile d'exécuter des requêtes de bases de données et effectuer des actions d'autres.
Lire la doctrine officielle de documentation DBAL pour apprendre tous les détails et les capacités de la bibliothèque DBAL Doctrine.
Pour commencer, configurer les paramètres de connexion de la base de données:
# app/config/config.yml doctrine: dbal: driver: pdo_mysql dbname: Symfony2 user: root password: null charset: UTF8
// app/config/config.xml <doctrine:config> <doctrine:dbal name="default" dbname="Symfony2" user="root" password="null" driver="pdo_mysql" /> </doctrine:config>
// app/config/config.php $container->loadFromExtension('doctrine', array( 'dbal' => array( 'driver' => 'pdo_mysql', 'dbname' => 'Symfony2', 'user' => 'root', 'password' => null, ), ));
Pour l'ensemble des options de configuration DBAL, voir Configuration Doctrine DBAL .
Vous pouvez ensuite accéder à la connexion Doctrine DBAL en accédant au service DATABASE_CONNECTION:
class UserController extends Controller { public function indexAction() { $conn = $this->get('database_connection'); $users = $conn->fetchAll('SELECT * FROM users'); // ... } }
Vous pouvez vous inscrire types de cartographie personnalisés grâce à la configuration de Symfony. Ils seront ajoutés à toutes les connexions configurées. Pour plus d'informations sur les types de cartographie personnalisée, lisez Cartographie de base Symfony2 .
# app/config/config.yml doctrine: dbal: types: custom_first: Acme\HelloBundle\Type\CustomFirst custom_second: Acme\HelloBundle\Type\CustomSecond
<!-- app/config/config.xml --> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doctrine="http://symfony.com/schema/dic/doctrine" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> <doctrine:config> <doctrine:dbal> <doctrine:dbal default-connection="default"> <doctrine:connection> <doctrine:mapping-type name="enum">string</doctrine:mapping-type> </doctrine:connection> </doctrine:dbal> </doctrine:config> </container>
// app/config/config.php $container->loadFromExtension('doctrine', array( 'dbal' => array( 'connections' => array( 'default' => array( 'mapping_types' => array( 'enum' => 'string', ), ), ), ), ));
Le SchemaTool est utilisé pour inspecter la base de données pour comparer le schéma. Pour réaliser cette tâche, il a besoin de savoir quel type de cartographie doit être utilisé pour chaque type de base de données. Enregistrement de nouvelles peut être fait par la configuration.
Voyons mapper le type ENUM (pas supported par DBAL par défaut) à un type de la chaîne de cartographie:
# app/config/config.yml doctrine: dbal: connections: default: // Other connections parameters mapping_types: enum: string
<!-- app/config/config.xml --> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:doctrine="http://symfony.com/schema/dic/doctrine" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd http://symfony.com/schema/dic/doctrine http://symfony.com/schema/dic/doctrine/doctrine-1.0.xsd"> <doctrine:config> <doctrine:dbal> <doctrine:type name="custom_first" class="Acme\HelloBundle\Type\CustomFirst" /> <doctrine:type name="custom_second" class="Acme\HelloBundle\Type\CustomSecond" /> </doctrine:dbal> </doctrine:config> </container>
// app/config/config.php $container->loadFromExtension('doctrine', array( 'dbal' => array( 'types' => array( 'custom_first' => 'Acme\HelloBundle\Type\CustomFirst', 'custom_second' => 'Acme\HelloBundle\Type\CustomSecond', ), ), ));