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の方が優先です。
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')