Your SlideShare is downloading. ×
Doctrine2 odm-workshop-1
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Doctrine2 odm-workshop-1

2,806
views

Published on

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

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

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,806
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
13
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Symfony2ワークショップ Doctrine2 MongoDB-ODM Symfony2 ワークショップ Doctrine2 (MongoDB-ODM) 日本Symfonyユーザー会 後藤 秀宣(@hidenorigoto)
  • 2. Symfony2ワークショップ Doctrine2 MongoDB-ODM 注意 2分 Symfony2は使いません Doctrine2はSymfony2の中でも役割が大きいので このワークショップでは独立して学習します MongoDB(ODM)でやりますが、MySQL(ORM)でも同じコンセプト なので応用できます (といっても、MongoDBの概念はRDBとはだいぶ違う) ★最後にSymfony2から使う方法があります
  • 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. 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. Symfony2ワークショップ Doctrine2 MongoDB-ODM Doctrine2 MongoDB ODM(1分) ● 概要 ODM = Object Document Mapper ORM的にMongoDBのドキュメント(レコード)を操作 Doctrine2 ORMとかなり統一性がある DQLっぽいもので検索できる ★もともとORMを使っていた開発者には、馴染みやすいス タイルと思われる Symfony2にも統合されている  
  • 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. Symfony2ワークショップ Doctrine2 MongoDB-ODM 01 ブートストラップ(5分) ● d2ws/01/01.php
  • 8. Symfony2ワークショップ Doctrine2 MongoDB-ODM 01 名前空間を使う (2分)
  • 9. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 (再)ドキュメントとは(1分) ● MongoDBに保存する1つのデータ構造(レコード) ドキュメントの集まり = コレクション ※コレクションがRDBのテーブルに相当する ● Doctrine2では、POPO(Plain Old PHP Object)のクラ スのメンバ変数(など)にアノテーションで設定を記述す る (この設定を「マッピング」と呼ぶ)
  • 10. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 ドキュメントの作成(5分) ● 02/Document/User.php
  • 11. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 ドキュメントの追加 (3分) ● d2ws/bootstrap.php(をコピーしてください) ● d2ws/02/02.php
  • 12. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 保存されたか確認(1分) ● $ mongo > use test > db.User.find() ● http://localhost:28017/test/User/
  • 13. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 取得 (1) (2分) d2ws/02/02-find1.php  ドキュメントマネージャーからfind findの戻り値はMongoCursorオブジェクト foreachで回すと、マッピング先のオブジェクト(DocumentUser)で取得できる
  • 14. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 取得(2) (2分) ● d2ws/02/02-find2.php Queryオブジェクトを使う →Query Builder API
  • 15. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 取得(3) (-分)  ● d2ws/02/02-find3.php DQL DQLを使ってCRUD。まだExperimentalらしい
  • 16. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 ハイドレート (2分) ● Queryオブジェクトのhydrate()メソッドのパラメータで ON/OFF指定  true = ON  false = OFF ->hydrate(false) にすると、foreachで回した時にマッピ ングが行われていない素のMongoレコードが返される (配列) ★カーソルオブジェクトはそのままという点も注意
  • 17. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 hydrate off (1分) ● d2ws/02/02-find2-non-hydrate.php
  • 18. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 更新(1) persist→flush ● 最初にデータを追加したのとほぼ同じ。 ● 複数のpersistを1回のflushにまとめられる。
  • 19. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 更新(2) modifier ● modifierを使うと処理効率が良い & ATOMIC
  • 20. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 更新(3) modifier(multiple) ● multipleオプションを使いたい場合は、execute()のオプ ションで指定する。
  • 21. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 削除(1) remove→flush  ● DocumentManager経由
  • 22. Symfony2ワークショップ Doctrine2 MongoDB-ODM 02 削除(その他) ● QueryBuilder / DQL経由もupdateと同様
  • 23. Symfony2ワークショップ Doctrine2 MongoDB-ODM 03 Embedding(組み込み) (10分) ● まあやってみましょう ● d2ws/03/ -03.php -Document/ -User.php -Address.php UserにAddressをEmbedします
  • 24. Symfony2ワークショップ Doctrine2 MongoDB-ODM 03 Embedding マッピング ● d2ws/03/Document/Person.php にEmbed追加
  • 25. Symfony2ワークショップ Doctrine2 MongoDB-ODM 03 Embedding 保存 ● d2ws/03/03.php
  • 26. Symfony2ワークショップ Doctrine2 MongoDB-ODM 03 Embedding 取得 ● d2ws/03/03-retrieve.php
  • 27. Symfony2ワークショップ Doctrine2 MongoDB-ODM 04 Reference(参照) (10分) ● Embeddingと似ている ReferenceはMongoDB上で実体が別になる ※一度に検索できない ● d2ws/04/ -04.php -Document/ -User.php -Address.php Userに記述する構文はEmbedとほとんど一緒
  • 28. Symfony2ワークショップ Doctrine2 MongoDB-ODM 04 Reference マッピング ● Embeddingと似ている アノテーションで、明示的にカスケードを指定する必要がある (Embeddingの場合は、デフォルトでカスケードされる)
  • 29. Symfony2ワークショップ Doctrine2 MongoDB-ODM 04 Reference 保存 ● 保存されたデータを確認 Rederenceの部分は、別コレクションのoidが保存される
  • 30. Symfony2ワークショップ Doctrine2 MongoDB-ODM 04 Reference 取得 ● 取得処理も同様(検索可能フィールドに注意)
  • 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」など