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

5,594 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
5,594
On SlideShare
0
From Embeds
0
Number of Embeds
1,127
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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. ありがとうございました!

×