Contenu connexe
Similaire à Symfony2からdoctrine mongo db odmを使ってみる (20)
Symfony2からdoctrine mongo db odmを使ってみる
- 2. 自己紹介
名前 : 岩崎晃司
誕生日 : 1981/11/6 (ぎりぎり20代)
twitter : @madapaja
blog : http://d.hatena.ne.jp/ja9/
仕事では主にPHPを使ってます。
SymfonyもMongoDBも、初心者ですが、、、
- 4. MongoDB
ドキュメント指向データベースに属する
DBです。
詳細は割愛します。
- 5. Doctrine MongoDB ODM
ODM=Object Document Mapper
Doctrine2のMongoDB版みたいなもの
です
Symfony2でサポートされています
Sandboxをダウンロードすると、もれなく
ついてきます
- 8. 1.Doctrine MongoDB Bundleを有効に
Sandboxのapp/AppKernel.php
class AppKernel extends Kernel
{
:
public function registerBundles()
{
$bundles = array(
:
// enable third-party bundles
:
new Symfony¥Bundle¥DoctrineMongoDBBundle¥
DoctrineMongoDBBundle(),
// ↑コメントアウトを解除し、有効に
:
- 9. 2. configに設定を追加
app/config/config.yml
最小限の設定
## MongoDB ODMの設定を追記。
doctrine_odm.mongodb:
mappings:
HelloBundle: ~
MongoDB ODM を
使用するバンドル名
- 10. 2. configに設定を追加
app/config/config.yml
最小限の設定
## MongoDB ODMの設定を追記。
doctrine_odm.mongodb:
mappings:
HelloBundle: ~
MongoDB ODM を
使用するバンドル名
最小限の設定の場合、mongodb://localhost:27017の
defaultデータベースに接続するよ
- 11. 2. configに設定を追加
app/config/config.yml
間違いが起きないように、
最低限以下のような設定をした方が
いいと思います。
## MongoDB ODMの設定を追記。
doctrine_odm.mongodb:
mappings:
HelloBundle: ~
server: mongodb://localhost:27017
default_database: my_db_name
- 12. 3.Documentクラスを作る
HelloBundle/Document/User.php
Annotationは@mongodb: で始める
namespace Application¥HelloBundle¥Document;
/** @mongodb:Document(collection="users") */
class User {
/** @mongodb:Id */
protected $id;
/** @mongodb:Date */
protected $create_at;
/** @mongodb:String */
protected $name;
// getter & Setter … …
}
- 13. 3.Documentクラスを作る
ちょっとした事。
いつでも@mongodb:
/**
* @mongodb:Indexes({
* @mongodb:Index(keys={"name"="asc"})
* })
*/ 油断して忘れない
間違って、@mongodb:Timestamp を利用しない
/** @mongodb:Date */
protected $at;
普通の日時保存にはDate型を使う
- 14. 4. Let's access!
HelloBundle/Controller/HelloController.php
落ち着いて、DocumentManagerを取得したら
// MongoDB ODM DocumentManager を取得
$dm = $this
->get('doctrine.odm.mongodb.document_manager');
- 15. 4. Let's access!
HelloBundle/Controller/HelloController.php
煮るなり、焼くなりご自由に!
// 1.保存
// Userドキュメントを生成し、データを入れる
$user = new
Application¥SasayakiBundle¥Document¥User();
$user->setName('madapaja');
$dm->persist($user); // データを入れて
$dm->flush(); // 保存
- 16. 4. Let's access!
HelloBundle/Controller/HelloController.php
煮るなり、焼くなりご自由に!
// 2.取得
$sasayaki = $dm
->getRepository(
‘Application¥SasayakiBundle
¥Document¥User')
->findByName("madapaja")
->getResults();
- 17. 4. Let's access!
HelloBundle/Controller/HelloController.php
煮るなり、焼くなりご自由に!
// 3.更新
$sasayaki = $dm
->createQuery(
'Application¥SasayakiBundle
¥Document¥User')
->findAndModify()
->field('name')->equals('madapaja')
// 更新します
->update()
->field('name')->set('まだぱじゃ')
->execute();
- 18. Annotationで設定したIndexの作成
ID以外をインデックスされるように、
@mongodb:Index アノテーションなどを
指定している場合、
// Indexを作成
$dm->getSchemaManager()
->ensureIndexes();
などとして、Indexを作りましょう。
- 20. 宣伝
アジア初となるMongoDBのカンファレンス
Mongo Tokyo
が開催されます!
3月1日(火) 13:00~19:30
品川シーサイド楽天タワーにて
開発元である10genのエンジニアを含む講演が行われます。
詳細は:
http://mongodb.jp/ からリンクしてます