読者です 読者をやめる 読者になる 読者になる

10分ぐらいで学べるSymfony2 〜データベース接続設定編〜

memcachedにつないだり、mongoにつないだり、複数のmysqlにつないだりとデータベースにつなぐ際の設定のメモとなります。


1. 通常の設定

$ vi app/config/parameters.ini
[parameters]
    database_driver   = pdo_mysql   # myslを使うならこのまま
    database_host     = localhost   # 接続先ホスト
    database_port     =             # 接続先ポート
    database_name     = symfony     # データベース名
    database_user     = hoge        # 接続ユーザ
    database_password = hage        # 接続パスワード

$ vi app/config/config.yml
# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true


2. 複数のMYSQLにつなぐ際の設定

複数の接続設定を書こうと思うと1階層深く設定を書く必要があります。
また、自分でconnectionを張る場合必要ないですが、ORM機能を使う場合、どのentityをマッピングしていくかのmappingの設定を個々に記載してく必要があります。
(auto_mappingをオフにする必要があって割とめんどそう)

$ vi app/config/config.yml
# Doctrine Configuration
    dbal:
        default_connection:   default
        connections:
            default:
                driver:   %database_driver%
                host:     %database_host%
                port:     %database_port%
                dbname:   %database_name%
                user:     %database_user%
                password: %database_password%
                charset:  UTF8
            test:
                driver:   %database_driver%
                host:     %database_host%
                port:     %database_port%
                dbname:   test
                user:     %database_user%
                password: %database_password%
                charset:  UTF8
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        default_entity_manager:   default
        entity_managers:
            default:
                connection:       default
                mappings:
                    RootSearchBundle:   ~
                    RootSiteBundle:     ~
                    RootUserBundle:     ~
            test:
                connection:       test
                mappings:
                    RootTestBundle:    ~

Entity Managerの取得の仕方

# デフォルト
$em = $this->getEntityManager()
$em = $this->getEntityManager('default')
# test
$em = $this->getEntityManager('test')


3. memcached接続設定

doctrineの設定をみるとmemcachedの設定あるじゃんとか思いがちですが、これはクエリキャッシュの設定っぽいので普通に利用したい場合、バンドルをインストールする必要があります。

memcacheBundleをインストールしてください。接続機能だけなのでわりとシンプルです。

$ vi app/config/config.yml
# Memcached Configuration
sm_memcache:
    use_mock: false
    port: 11211
    host: localhost


memcachedオブジェクト取得の仕方

$memcache = $this->get('sm_memcache');

あとは戻ってくるオブジェクトは下記のどちらかになりますので普通に使いましょう。
インストールされてるモジュールにより異なりますがmemcachedの方が優先です。

memcached
memcache


4. mongodbの接続設定

MongoDBBundleのインストール・利用法は下記を参照してください
http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html

「auto_mapping: true」にすると自分の環境だと外部バンドルの設定ファイルに反応してエラーになったので個別指定してます。

$ vi app/config/config.yml
# mongo Configuration
doctrine_mongodb:
    connections:
        default:
            server: mongodb://localhost:27017
            options:
                connect: true
    default_database: symfony
    document_managers:
        default:
            mappings:
                RootMongoBundle:    ~

レポジトリの取得の仕方

doctrineのEntityと同じようにDocumentを設定して「php app/console doctrine:mongodb:generate:documents RootMongoBundle」コマンド実行すると
レポジトリなどのorm機能が使えるようになります。

$repository = $this->get('doctrine.odm.mongodb.document_manager')
    ->getRepository('RootMongoBundle:Product')