Doctrine2 odm-workshop-1

3,323 views

Published on

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

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

No Downloads
Views
Total views
3,323
On SlideShare
0
From Embeds
0
Number of Embeds
349
Actions
Shares
0
Downloads
14
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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」など

×