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でMongoDBと仲良くする方法

6,347 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 } ] } });

×