.. index::
pair: Doctrine; DBAL
Como usar a Camada DBAL do Doctrine
===================================
.. note::
Este artigo é sobre a camada DBAL do Doctrine. Normalmente, você vai trabalhar com
a camada de alto nível ORM do Doctrine, que simplesmente usa o DBAL, nos
bastidores, para comunicar-se com o banco de dados. Para ler mais sobre
o ORM Doctrine, consulte ":doc:`/book/doctrine`".
A Camada de Abstração de Banco de Dados `Doctrine`_ (DBAL) é uma camada de abstração que
fica situada no topo do `PDO`_ e oferece uma API intuitiva e flexível para se comunicar
com os bancos de dados relacionais mais populares. Em outras palavras, a biblioteca DBAL
torna mais fácil a execução de consultas e de outras ações de banco de dados.
.. tip::
Leia a `Documentação oficial do DBAL`_ para aprender todos os detalhes
e as capacidades da biblioteca DBAL do Doctrine.
Para começar, configure os parâmetros de conexão do banco de dados:
.. configuration-block::
.. code-block:: yaml
# app/config/config.yml
doctrine:
dbal:
driver: pdo_mysql
dbname: Symfony2
user: root
password: null
charset: UTF8
.. code-block:: xml
// app/config/config.xml
.. code-block:: php
// app/config/config.php
$container->loadFromExtension('doctrine', array(
'dbal' => array(
'driver' => 'pdo_mysql',
'dbname' => 'Symfony2',
'user' => 'root',
'password' => null,
),
));
Para ver todas as opções de configuração do DBAL, consulte :ref:`reference-dbal-configuration`.
Você pode acessar a conexão DBAL do Doctrine acessando o
serviço ``database_connection``:
.. code-block:: php
class UserController extends Controller
{
public function indexAction()
{
$conn = $this->get('database_connection');
$users = $conn->fetchAll('SELECT * FROM users');
// ...
}
}
Registrando Tipos de Mapeamento Personalizados
----------------------------------------------
Você pode registrar tipos de mapeamento personalizados através de configuração do symfony. Eles
serão adicionados à todas as conexões configuradas. Para mais informações sobre tipos de
mapeamento personalizados, leia a seção `Tipos de Mapeamento Personalizados`_ na documentação do Doctrine.
.. configuration-block::
.. code-block:: yaml
# app/config/config.yml
doctrine:
dbal:
types:
custom_first: Acme\HelloBundle\Type\CustomFirst
custom_second: Acme\HelloBundle\Type\CustomSecond
.. code-block:: xml
.. code-block:: php
// app/config/config.php
$container->loadFromExtension('doctrine', array(
'dbal' => array(
'types' => array(
'custom_first' => 'Acme\HelloBundle\Type\CustomFirst',
'custom_second' => 'Acme\HelloBundle\Type\CustomSecond',
),
),
));
Registrando Tipos de Mapeamento Personalizados no SchemaTool
------------------------------------------------------------
O SchemaTool é usado para inspecionar o banco de dados para comparar o esquema. Para
realizar esta tarefa, ele precisa saber que tipo de mapeamento precisa ser usado
para cada um dos tipos do banco de dados. O registro de novos pode ser feito através de configuração.
Vamos mapear o tipo ENUM (por padrão não suportado pelo DBAL) para um tipo de mapeamento
``string``:
.. configuration-block::
.. code-block:: yaml
# app/config/config.yml
doctrine:
dbal:
connections:
default:
// Other connections parameters
mapping_types:
enum: string
.. code-block:: xml
string
.. code-block:: php
// app/config/config.php
$container->loadFromExtension('doctrine', array(
'dbal' => array(
'connections' => array(
'default' => array(
'mapping_types' => array(
'enum' => 'string',
),
),
),
),
));
.. _`PDO`: http://www.php.net/pdo
.. _`Doctrine`: http://www.doctrine-project.org
.. _`Documentação oficial do DBAL`: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/index.html
.. _`Tipos de Mapeamento Personalizados`: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#custom-mapping-types