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.

Doctrine2 odm-workshop-1

3,358 views

Published on

日本Symfonyユーザー会 第1回Symfony2勉強会 MongoDB ODMワークショップ基礎編

Published in: Technology
  • Be the first to comment

Doctrine2 odm-workshop-1

  1. 1. Symfony2ワークショップ Doctrine2 MongoDB-ODM Symfony2 ワークショップ Doctrine2 (MongoDB-ODM) 日本Symfonyユーザー会 後藤 秀宣(@hidenorigoto)
  2. 2. Symfony2ワークショップ Doctrine2 MongoDB-ODM 注意 2分 Symfony2は使いません Doctrine2はSymfony2の中でも役割が大きいので このワークショップでは独立して学習します MongoDB(ODM)でやりますが、MySQL(ORM)でも同じコンセプト なので応用できます (といっても、MongoDBの概念はRDBとはだいぶ違う) ★最後にSymfony2から使う方法があります
  3. 3. Symfony2ワークショップ Doctrine2 MongoDB-ODM   ● 参考ドキュメントURL http://www.mongodb.org/display/DOCSJP/Home http://docs.symfony-reloaded.org/master/ http://www.doctrine- project.org/projects/mongodb_odm
  4. 4. Symfony2ワークショップ Doctrine2 MongoDB-ODM MongoDB準備(5分) ● $ mongo > help > show dbs > use test > show collections > db.User.help() > db.User.find() ● pecl install mongo ● http://localhost:28017/ ←Webインターフェイス /etc/mongodb.conf rest=true を追加 動く方は、helpなどを見てください
  5. 5. Symfony2ワークショップ Doctrine2 MongoDB-ODM Doctrine2 MongoDB ODM(1分) ● 概要 ODM = Object Document Mapper ORM的にMongoDBのドキュメント(レコード)を操作 Doctrine2 ORMとかなり統一性がある DQLっぽいもので検索できる ★もともとORMを使っていた開発者には、馴染みやすいス タイルと思われる Symfony2にも統合されている  
  6. 6. Symfony2ワークショップ Doctrine2 MongoDB-ODM mongodb-odm(5分) ● Doctrine2のうち、MongoDBを扱うライブラリ $ mkdir wsroot  ←ワークショップ作業ルート(任意) $ cd wsroot $ git clone git://github.com/doctrine/ mongodb-odm.git $ cd mongodb-odm $ git submodule init $ git submodule update $ cd .. $ mkdir d2ws   ←作業ファイル用(任意) ● Git環境がない場合は今回用のパッケージをコピー
  7. 7. Symfony2ワークショップ Doctrine2 MongoDB-ODM 01 ブートストラップ(5分) ● d2ws/01/01.php
  8. 8. Symfony2ワークショップ Doctrine2 MongoDB-ODM 01 名前空間を使う (2分)
  9. 9. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 (再)ドキュメントとは(1分) ● MongoDBに保存する1つのデータ構造(レコード) ドキュメントの集まり = コレクション ※コレクションがRDBのテーブルに相当する ● Doctrine2では、POPO(Plain Old PHP Object)のクラ スのメンバ変数(など)にアノテーションで設定を記述す る (この設定を「マッピング」と呼ぶ)
  10. 10. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 ドキュメントの作成(5分) ● 02/Document/User.php
  11. 11. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 ドキュメントの追加 (3分) ● d2ws/bootstrap.php(をコピーしてください) ● d2ws/02/02.php
  12. 12. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 保存されたか確認(1分) ● $ mongo > use test > db.User.find() ● http://localhost:28017/test/User/
  13. 13. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 取得 (1) (2分) d2ws/02/02-find1.php  ドキュメントマネージャーからfind findの戻り値はMongoCursorオブジェクト foreachで回すと、マッピング先のオブジェクト(DocumentUser)で取得できる
  14. 14. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 取得(2) (2分) ● d2ws/02/02-find2.php Queryオブジェクトを使う →Query Builder API
  15. 15. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 取得(3) (-分)  ● d2ws/02/02-find3.php DQL DQLを使ってCRUD。まだExperimentalらしい
  16. 16. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 ハイドレート (2分) ● Queryオブジェクトのhydrate()メソッドのパラメータで ON/OFF指定  true = ON  false = OFF ->hydrate(false) にすると、foreachで回した時にマッピ ングが行われていない素のMongoレコードが返される (配列) ★カーソルオブジェクトはそのままという点も注意
  17. 17. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 hydrate off (1分) ● d2ws/02/02-find2-non-hydrate.php
  18. 18. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 更新(1) persist→flush ● 最初にデータを追加したのとほぼ同じ。 ● 複数のpersistを1回のflushにまとめられる。
  19. 19. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 更新(2) modifier ● modifierを使うと処理効率が良い & ATOMIC
  20. 20. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 更新(3) modifier(multiple) ● multipleオプションを使いたい場合は、execute()のオプ ションで指定する。
  21. 21. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 削除(1) remove→flush  ● DocumentManager経由
  22. 22. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 削除(その他) ● QueryBuilder / DQL経由もupdateと同様
  23. 23. Symfony2ワークショップ Doctrine2 MongoDB-ODM 03 Embedding(組み込み) (10分) ● まあやってみましょう ● d2ws/03/ -03.php -Document/ -User.php -Address.php UserにAddressをEmbedします
  24. 24. Symfony2ワークショップ Doctrine2 MongoDB-ODM 03 Embedding マッピング ● d2ws/03/Document/Person.php にEmbed追加
  25. 25. Symfony2ワークショップ Doctrine2 MongoDB-ODM 03 Embedding 保存 ● d2ws/03/03.php
  26. 26. Symfony2ワークショップ Doctrine2 MongoDB-ODM 03 Embedding 取得 ● d2ws/03/03-retrieve.php
  27. 27. Symfony2ワークショップ Doctrine2 MongoDB-ODM 04 Reference(参照) (10分) ● Embeddingと似ている ReferenceはMongoDB上で実体が別になる ※一度に検索できない ● d2ws/04/ -04.php -Document/ -User.php -Address.php Userに記述する構文はEmbedとほとんど一緒
  28. 28. Symfony2ワークショップ Doctrine2 MongoDB-ODM 04 Reference マッピング ● Embeddingと似ている アノテーションで、明示的にカスケードを指定する必要がある (Embeddingの場合は、デフォルトでカスケードされる)
  29. 29. Symfony2ワークショップ Doctrine2 MongoDB-ODM 04 Reference 保存 ● 保存されたデータを確認 Rederenceの部分は、別コレクションのoidが保存される
  30. 30. Symfony2ワークショップ Doctrine2 MongoDB-ODM 04 Reference 取得 ● 取得処理も同様(検索可能フィールドに注意)
  31. 31. Symfony2ワークショップ Doctrine2 MongoDB-ODM まだまだありますが・・・ ● 次回にご期待くださいw ● Symfony2で使うには・・・・ ・app/AppKernel.php でバンドル有効化 ・app/config/config.phpでエクステンション設定 →「doctrine_odm.mongodb: ~」 ・ドキュメントマネージャーはコンテナ経由 「$this['doctrine.odm.mongodb.document_manager']」 →アノテーションがちょっとだけ違う 「@mongodb:Document」など

×