Doctrine の DBAL レイヤーの使用方法¶
Note
この記事は、 Doctrine の DBAL レイヤーに関するものです。通常は、より高いレベルの Doctrine ORM レイヤーを使用します。 Doctrine ORM レイヤーは、データベースを実際にコミュニケートするシーンの背後で DBAL を使用しています。 Doctrine ORM に関する詳細は、 “データベースと Doctrine (“The Model”)” を参照してください。
Doctrine データベースアブストラクションレイヤー (DBAL) は、 PDO の上の抽象レイヤーで、ほとんどの人気のあるリレーショナルデータベースとコミュニケートする直感的で柔軟な API を提供します。つまり、 DBAL ライブラリは、クエリーを実行するなどデータベースの処理を簡単にさせてくれます。
Tip
公式の Doctrine のドキュメント DBAL Documentation を読むと、 Doctrine の DBAL ライブラリの詳細や実現可能なことを全て学ぶことができます。
まず、データベース接続のパラメータを設定してください。 :
-
YAML
# app/config/config.yml doctrine: dbal: driver: pdo_mysql dbname: Symfony2 user: root password: null charset: UTF8
-
XML
// app/config/config.xml <doctrine:config> <doctrine:dbal name="default" dbname="Symfony2" user="root" password="null" driver="pdo_mysql" /> </doctrine:config>
-
PHP
// app/config/config.php $container->loadFromExtension('doctrine', array( 'dbal' => array( 'driver' => 'pdo_mysql', 'dbname' => 'Symfony2', 'user' => 'root', 'password' => null, ), ));
完全な DBAL コンフィギュレーションのオプションは、 reference-dbal-configuration を参照してください。
これで、 database_connection サービスを通して Doctrine DBAL 接続にアクセスできるようになりました。 :
class UserController extends Controller
{
public function indexAction()
{
$conn = $this->get('database_connection');
$users = $conn->fetchAll('SELECT * FROM users');
// ...
}
}
カスタムマップタイプを登録する¶
Symfony のコンフィギュレーションを通して、カスタムマップタイプを登録することができます。これは、設定された全ての接続に追加されます。カスタムマップタイプの詳細は、 Doctrine のドキュメントの Custom Mapping Types セクションを参照してください。
-
YAML
# app/config/config.yml doctrine: dbal: types: custom_first: Acme\HelloBundle\Type\CustomFirst custom_second: Acme\HelloBundle\Type\CustomSecond
-
XML
<!-- 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>
-
PHP
// app/config/config.php $container->loadFromExtension('doctrine', array( 'dbal' => array( 'connections' => array( 'default' => array( 'mapping_types' => array( 'enum' => 'string', ), ), ), ), ));
スキーマツールでカスタムマップタイプを登録する¶
スキーマツールは、スキーマと比較してデータベースを調べるために使用されます。このタスクを行うには、それぞれのデータベースタイプにどのマップタイプが必要か知ってる必要があります。新しく追加する際には、コンフィギュレーションを通して登録します。
デフォルトでは、 DBAL でサポートされていない ENUM タイプを string マップタイプにマップしましょう。 :
-
YAML
# app/config/config.yml doctrine: dbal: connection: default: // Other connections parameters mapping_types: enum: string
-
XML
<!-- 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>
-
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', ), ), ));