Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Symfony2からdoctrine mongo db odmを使ってみる

5,691 views

Published on

※暫定版なので、まだ更新するかも。。。
2011-1-15 #symfony2study でのLT発表資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Symfony2からdoctrine mongo db odmを使ってみる

  1. 1. Symfony2からDoctrine MongoDB ODMを使ってみる 2011-1-15 Symfony2勉強会 岩崎 晃司(@madapaja)
  2. 2. 自己紹介 名前 : 岩崎晃司 誕生日 : 1981/11/6 (ぎりぎり20代) twitter : @madapaja blog : http://d.hatena.ne.jp/ja9/仕事では主にPHPを使ってます。SymfonyもMongoDBも、初心者ですが、、、
  3. 3. Symfony2からDoctrine MongoDB ODMを使ってみる
  4. 4. MongoDB ドキュメント指向データベースに属する DBです。 詳細は割愛します。
  5. 5. Doctrine MongoDB ODM ODM=Object Document Mapper Doctrine2のMongoDB版みたいなもの です Symfony2でサポートされています Sandboxをダウンロードすると、もれなく ついてきます
  6. 6. 環境を用意する Symfony2が動く環境を用意します Symfony2のSandboxを用意します MongoDBが必要です PHP Mongo Extensionが必要です  sudo pecl install mongo でインストール  php.ini に extension=mongo.so を追記  httpdなどの再起動が必要かもね
  7. 7. 使い方Doctrine2 ORM とほぼ同じように使えるよ1. Doctrine MongoDB Bundleを有効に2. configに設定を追加3. Document(ORMでいうEntity)クラスを 作る4. Lets access!
  8. 8. 1.Doctrine MongoDB Bundleを有効に  Sandboxのapp/AppKernel.phpclass AppKernel extends Kernel{ : public function registerBundles() { $bundles = array( : // enable third-party bundles : new Symfony¥Bundle¥DoctrineMongoDBBundle¥ DoctrineMongoDBBundle(), // ↑コメントアウトを解除し、有効に :
  9. 9. 2. configに設定を追加 app/config/config.yml  最小限の設定## MongoDB ODMの設定を追記。doctrine_odm.mongodb: mappings: HelloBundle: ~ MongoDB ODM を 使用するバンドル名
  10. 10. 2. configに設定を追加 app/config/config.yml  最小限の設定## MongoDB ODMの設定を追記。doctrine_odm.mongodb: mappings: HelloBundle: ~ MongoDB ODM を 使用するバンドル名最小限の設定の場合、mongodb://localhost:27017のdefaultデータベースに接続するよ
  11. 11. 2. configに設定を追加 app/config/config.yml  間違いが起きないように、 最低限以下のような設定をした方が いいと思います。## MongoDB ODMの設定を追記。doctrine_odm.mongodb: mappings: HelloBundle: ~ server: mongodb://localhost:27017 default_database: my_db_name
  12. 12. 3.Documentクラスを作る HelloBundle/Document/User.php  Annotationは@mongodb: で始めるnamespace Application¥HelloBundle¥Document;/** @mongodb:Document(collection="users") */class User { /** @mongodb:Id */ protected $id; /** @mongodb:Date */ protected $create_at; /** @mongodb:String */ protected $name; // getter & Setter … …}
  13. 13. 3.Documentクラスを作る  ちょっとした事。  いつでも@mongodb:/** * @mongodb:Indexes({ * @mongodb:Index(keys={"name"="asc"}) * }) */ 油断して忘れない  間違って、@mongodb:Timestamp を利用しない /** @mongodb:Date */ protected $at; 普通の日時保存にはDate型を使う
  14. 14. 4. Lets access!  HelloBundle/Controller/HelloController.php  落ち着いて、DocumentManagerを取得したら// MongoDB ODM DocumentManager を取得$dm = $this ->get(doctrine.odm.mongodb.document_manager);
  15. 15. 4. Lets access!  HelloBundle/Controller/HelloController.php  煮るなり、焼くなりご自由に!// 1.保存// Userドキュメントを生成し、データを入れる$user = new Application¥SasayakiBundle¥Document¥User();$user->setName(madapaja);$dm->persist($user); // データを入れて$dm->flush(); // 保存
  16. 16. 4. Lets access!  HelloBundle/Controller/HelloController.php  煮るなり、焼くなりご自由に!// 2.取得$sasayaki = $dm ->getRepository( ‘Application¥SasayakiBundle ¥Document¥User) ->findByName("madapaja") ->getResults();
  17. 17. 4. Lets access!  HelloBundle/Controller/HelloController.php  煮るなり、焼くなりご自由に!// 3.更新$sasayaki = $dm ->createQuery( Application¥SasayakiBundle ¥Document¥User) ->findAndModify() ->field(name)->equals(madapaja) // 更新します ->update() ->field(name)->set(まだぱじゃ) ->execute();
  18. 18. Annotationで設定したIndexの作成 ID以外をインデックスされるように、 @mongodb:Index アノテーションなどを 指定している場合、// Indexを作成$dm->getSchemaManager() ->ensureIndexes(); などとして、Indexを作りましょう。
  19. 19. 最後に MongoDBの開発は非常に活発です。 Shardingやレプリケーション、耐障害性 などの向上、機能追加も予定(ver.1.7系、 1.8~)されているようで、より運用しやす いプロダクトに成長し、使える幅が広が るのではないかと期待しています。 面白い情報などありましたら、twitterなど で教えてください! MongoDB楽しい!
  20. 20. 宣伝 アジア初となるMongoDBのカンファレンス Mongo Tokyo が開催されます! 3月1日(火) 13:00~19:30 品川シーサイド楽天タワーにて開発元である10genのエンジニアを含む講演が行われます。 詳細は: http://mongodb.jp/ からリンクしてます
  21. 21. ありがとうございました!

×