Successfully reported this slideshow.

Symfony2でMongoDBと仲良くする方法

6,134 views

Published on

2011-06-04の第4回Symfony2勉強会の発表資料。
(2011-06-07 二枚目を頑張って更新。。。汗)

Published in: Technology, Spiritual
  • Be the first to comment

Symfony2でMongoDBと仲良くする方法

  1. 1. • •••••
  2. 2. • ••••
  3. 3. • ••
  4. 4. • •••
  5. 5. • •••
  6. 6. • ••••
  7. 7. • •••••
  8. 8. • •••••
  9. 9. •••
  10. 10. •••••
  11. 11. ※•
  12. 12. • //... $loader->registerNamespaces(array( Symfony => array(__DIR__./../vendor/symfony/src, __DIR__./../vendor/bundles), //... // 下記2行を追加 DoctrineMongoDB => __DIR__./../vendor/doctrine-mongodb/lib, DoctrineODM => __DIR__./../vendor/doctrine-mongodb-odm/lib, )); //...
  13. 13. • //... public function registerBundles() { $bundles = array( //... // 下記を追加 new SymfonyBundleDoctrineMongoDBBundleDoctrineMongoDBBundle(), ); //...
  14. 14. •• //... $loader->registerNamespaces(array( //... Madapaja => __DIR__./../src, )); //...• //... public function registerBundles() { $bundles = array( //... new MadapajaEnqueteFormBundleMadapajaEnqueteFormBundle(), ); //...
  15. 15. • #... doctrine_mongodb: default_database: wiki_%kernel.environment% # デフォルトDB名の指定 connections: # 接続設定 default: server: %mongo_server% # サーバー情報はparameters.iniから読み込み options: connect: true document_managers: # DocumentManager設定 default: mappings: MadapajaMongoWikiBundle: ~• [parameters] ;... mongo_server="mongodb://localhost:27017"
  16. 16. • #... framework: #... validation: { enabled: true } # Validation を有効にしておく• wiki: # /wiki から始まるURLはMadapajaMongoWikiBundleのrouting.ymlから読み込む prefix: /wiki resource: "@MadapajaMongoWikiBundle/Resources/config/routing.yml"
  17. 17. • • • • array(Tag1, Tag2) • • •
  18. 18. MadapajaMongoWikiBundleDocument; Page{ $id; $body; $tags = (); $revisions = (); $createdAt; $updatedAt; // 各 Setter/Getter function を定義...}
  19. 19. • • /** * @mongodb:Document(collection="pages") */ Page { //... }
  20. 20. • • /** * @mongodb:String */ $body; • /** * @mongodb:Date */ $createdAt; /** * @mongodb:Date */ $updatedAt;
  21. 21. • • /** * @mongodb:Id(strategy="NONE") */ $id; • •
  22. 22. • /** * @mongodb:Collection * @mongodb:Index */ $tags = (); • • • • ※
  23. 23. • /** * @mongodb:EmbedMany( * targetDocument="MadapajaMongoWikiBundleDocumentPageRevision" * ) */ $revisions = (); • •
  24. 24. • • • MadapajaMongoWikiBundleDocument; /** @mongodb:EmbeddedDocument */ PageRevision { /** @mongodb:String */ $body; /** @mongodb:Date */ $createdAt; // 各 Setter/Getter function を定義... } •
  25. 25. • $dm = $this->get(doctrine.odm.mongodb.document_manager);• // DocumentManager からリポジトリを取得して、 $page = $dm->getRepository(MadapajaMongoWikiBundle:Page) // id が $pageName なデータを一件取得 ->findOneBy( (id => $pageName));
  26. 26. • // 新しいPageを作って $page = MadapajaMongoWikiBundleDocumentPage($pageName); //... $pageにデータをセットする // DocumentManager にセット $dm->persist($page); // 保存する $dm->flush();
  27. 27. • // ページを取得 $page = $dm->getRepository(MadapajaMongoWikiBundle:Page) ->findOneBy( (id => $pageName)); // PageRevision の生成 $revision = MadapajaMongoWikiBundleDocumentPageRevision(); // ... $revision と $page にデータをセットする // リビジョンの追加 $page->addRevision($revision); // DocumentManager にセット $dm->persist($page); // 保存する $dm->flush();
  28. 28. • // SchemaManager を通して、インデックスを生成させます。 $dm->getSchemaManager()->ensureDocumentIndexes( ($page));
  29. 29.
  30. 30. { "_id" : "home", "body" : "再度更新をしてみます", "tags" : [ "Tag1", "Tag2", "Tag3" ], "revisions" : [ { "body" : "最初に作ったページです", "createdAt" : ISODate("2011-06-02T11:4 6Z") 0:4 }, { "body" : "更新を1回してみます", "createdAt" : ISODate("2011-06-02T11:4 9Z") 6:4 } ], "createdAt" : ISODate("2011-06-02T11:4 6Z"), 0:4 "updatedAt" : ISODate("2011-06-02T11:48:29Z")}
  31. 31. { "_id" : "home", "body" : "再度更新をしてみます", "tags" : [ "Tag1", "Tag2", "Tag3" ], "revisions" : [ { "body" : "最初に作ったページです", "createdAt" : ISODate("2011-06-02T11:4 6Z") 0:4 }, { "body" : "更新を1回してみます", "createdAt" : ISODate("2011-06-02T11:4 9Z") 6:4 } ], "createdAt" : ISODate("2011-06-02T11:4 6Z"), 0:4 "updatedAt" : ISODate("2011-06-02T11:48:29Z")}
  32. 32. • // e.g. db.pages.update( { "_id": "home" }, { "$set": { "body": "再度更新をしてみます", "updatedAt": new Date("Thu, 02 Jun 2011 20:4 8:29 +0900") } }); db.pages.update( { "_id": "home" }, { "$pushAll": { "revisions": [ { "body": "更新を1回してみます", "createdAt": new Date("Thu, 02 Jun 2011 20:4 9 +0900") 6:4 } ] } });
  33. 33. • // e.g. db.pages.update( { "_id": "home" }, { "$set": { "body": "再度更新をしてみます", "updatedAt": new Date("Thu, 02 Jun 2011 20:4 8:29 +0900") } }); db.pages.update( { "_id": "home" }, { "$pushAll": { "revisions": [ { "body": "更新を1回してみます", "createdAt": new Date("Thu, 02 Jun 2011 20:4 9 +0900") 6:4 } ] } });
  34. 34. • // e.g. db.pages.update( { "_id": "home" }, { "$set": { "body": "再度更新をしてみます", "updatedAt": new Date("Thu, 02 Jun 2011 20:4 8:29 +0900") } }); db.pages.update( { "_id": "home" }, { "$pushAll": { "revisions": [ { "body": "更新を1回してみます", "createdAt": new Date("Thu, 02 Jun 2011 20:4 9 +0900") 6:4 } ] } });

×