23
これから始める DoctrineMongoDBBundle の使い方 Symfony2勉強会 #5

Symfony2#5 LT

Embed Size (px)

DESCRIPTION

MongoDBBundle

Citation preview

Page 1: Symfony2#5 LT

これから始めるDoctrineMongoDBBundle

の使い方

Symfony2勉強会 #5

Page 2: Symfony2#5 LT

自己紹介● 小泉 正人● 映画向け映像加工アプリのプロダクトマネー

ジャ● Symfony2歴 3ヶ月くらい● MongoDB歴 3ヶ月くらい● PHP たしなむ程度● twitter.com/hamichamp● http://on.fb.me/koizumimasato

Page 3: Symfony2#5 LT

対象となる方● これからMongoDBをSymfony2で使ってみたい

と思っている方。● 実践的な内容じゃなくてごめんなさい。● 個人的に苦労した部分をちょっぴり共有しま

す。

Page 4: Symfony2#5 LT

試した環境● MacOS X Lion● PHP バージョン5.3.6● MongoDB バージョン2.0● Symfony2 バージョン2.0.6● DoctrineMongoDBBundle バージョン2.0.0

Page 5: Symfony2#5 LT

環境構築● MongoDBのインストールとか● php.iniの設定とか

● 探せばいっぱい出てくるので省略。● DoctrineMongoDBBundleのインストール

● 基本的には、公式ページの補足です。● http://symfony.com/doc/current/bundles/

DoctrineMongoDBBundle/index.htm● これから説明します。

Page 6: Symfony2#5 LT

インストール● depsファイルの編集

● インストールコマンド● gitが必要です

Page 7: Symfony2#5 LT

注意● 公式ページは書いてないけど、githubではこっそ

りバージョンが指定されている!

● 2.0ブランチかv2.0.0を使う● version=origin/2.0● version=v2.0.0 (今回はこちらを使用)

Page 8: Symfony2#5 LT

その他の設定● app/autoload.php

● app/AppKernel.php

● 公式ドキュメントのままなので省略

Page 9: Symfony2#5 LT

Documentの作成● マッピング方法は3種類

● Annotations● YAML● XML

● マッピングしたら、doctrineで生成php app/console doctrine:mongodb:generate:documents [--document[=”...”]] bundle

Page 10: Symfony2#5 LT

Annotationsの場合● Documentフォルダ● コメントで指定● @MongoDBを付ける● doctrineがset/getを自

動生成● 注意

● 上書きされます● .php~にリネーム

Page 11: Symfony2#5 LT

YAMLの場合● Resource/config/doctr

ineフォルダ● クラス.mongodb.yml

という命名法則らしい

● doctrineがクラスファイルを生成

Page 12: Symfony2#5 LT

XMLの場合● YAMLと記述方式以外は同じみたいなので省略

Page 13: Symfony2#5 LT

YAMLとXMLの注意● 記述的には出力先は自由に指定出来そうだけ

ど・・・● Documentフォルダでないとダメみたい。● DoctrineでExceptionが発生● Notice: Undefined index:● vendor/doctrine-mongodb-

odm/lib/Doctrine/ODM/MongoDB/Mapping/Driver/AbstractFileDriver.php line 116

Page 14: Symfony2#5 LT

YAMLとXMLの注意● 新しいDocumentを変換する際にException

● Warning: class_parents()● vendor/doctrine-mongodb-

odm/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php line 336

● もう一度、Doctrineを実行するとうまくいく● 他のバージョンで直っているかもしれません

が、今回は未確認です。

Page 15: Symfony2#5 LT

定義の優先順位● XML、YAML、Annotationsの順番っぽい

● XMLファイルがあると、YAMLとAnnotationsは無視

● YAMLファイルがあると、Annotationsは無視● 基本的には、どれか一種類で記述すると思う

ので、あんまり気にしなくてもいいのかな?

Page 16: Symfony2#5 LT

簡単な使い方● 保存とか● 検索とか● 更新とか● 削除とか

● 公式ページを見てみてください。

Page 17: Symfony2#5 LT

まとめ● 保存

● $dm->persist($product)● 検索

● $dm->getRepository('AcmeStore:Product')->find()● 更新

● 検索で取得したオブジェクトを操作● 削除

● $dm->remove($project)● DBに結果を反映するには、$dm->flush()

Page 18: Symfony2#5 LT

省略● バリデーションとか

● 基本的に同じです。● Embedded Mappingとか● Reference Mappingとか

● http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/index.html

● 但し、サンプルには@MongoDBがついていないので、追記してください。

Page 19: Symfony2#5 LT

おしまい

だけど・・・

Page 20: Symfony2#5 LT

おまけ

Page 21: Symfony2#5 LT

エンティティフィールド● 選択肢を選ぶタイプ

● selectタグとか● DBからデータを参照したい● Entityを利用した方法は公式に書いてある

● http://symfony.com/doc/current/reference/forms/types/entity.html

Page 22: Symfony2#5 LT

MongoDBではどうするの?

Page 23: Symfony2#5 LT

ありがとうございました