Upload
madapaja
View
4.583
Download
5
Embed Size (px)
DESCRIPTION
※暫定版なので、まだ更新するかも。。。 2011-1-15 #symfony2study でのLT発表資料
Citation preview
Symfony2からDoctrine MongoDB ODMを
使ってみる
2011-1-15Symfony2勉強会
岩崎 晃司(@madapaja)
自己紹介
名前 : 岩崎晃司
誕生日 : 1981/11/6 (ぎりぎり20代)
twitter : @madapaja
blog : http://d.hatena.ne.jp/ja9/
仕事では主にPHPを使ってます。
SymfonyもMongoDBも、初心者ですが、、、
Symfony2からDoctrine MongoDB ODMを
使ってみる
MongoDB
ドキュメント指向データベースに属するDBです。
詳細は割愛します。
Doctrine MongoDB ODM
ODM=Object Document Mapper
Doctrine2のMongoDB版みたいなもの
です
Symfony2でサポートされています
Sandboxをダウンロードすると、もれなく
ついてきます
環境を用意する
Symfony2が動く環境を用意します
Symfony2のSandboxを用意します
MongoDBが必要です
PHP Mongo Extensionが必要です
sudo pecl install mongo でインストール
php.ini に extension=mongo.so を追記
httpdなどの再起動が必要かもね
使い方
Doctrine2 ORM とほぼ同じように使えるよ
1. Doctrine MongoDB Bundleを有効に
2. configに設定を追加
3. Document(ORMでいうEntity)クラスを
作る
4. Let's access!
1.Doctrine MongoDB Bundleを有効に
Sandboxのapp/AppKernel.phpclass AppKernel extends Kernel{
:public function registerBundles(){
$bundles = array(:
// enable third-party bundles:
new Symfony¥Bundle¥DoctrineMongoDBBundle¥DoctrineMongoDBBundle(),
// ↑コメントアウトを解除し、有効に:
2. configに設定を追加
app/config/config.yml
最小限の設定
## MongoDB ODMの設定を追記。
doctrine_odm.mongodb:
mappings:
HelloBundle: ~
MongoDB ODM を
使用するバンドル名
2. configに設定を追加
app/config/config.yml
最小限の設定
## MongoDB ODMの設定を追記。
doctrine_odm.mongodb:
mappings:
HelloBundle: ~
MongoDB ODM を
使用するバンドル名
最小限の設定の場合、mongodb://localhost:27017のdefaultデータベースに接続するよ
2. configに設定を追加
app/config/config.yml
間違いが起きないように、最低限以下のような設定をした方がいいと思います。
## MongoDB ODMの設定を追記。
doctrine_odm.mongodb:
mappings:
HelloBundle: ~
server: mongodb://localhost:27017
default_database: my_db_name
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 … …
}
3.Documentクラスを作る
ちょっとした事。
いつでも@mongodb:
/**
* @mongodb:Indexes({
* @mongodb:Index(keys={"name"="asc"})
* })
*/ 油断して忘れない
間違って、@mongodb:Timestamp を利用しない
/** @mongodb:Date */
protected $at;
普通の日時保存にはDate型を使う
4. Let's access!
HelloBundle/Controller/HelloController.php
落ち着いて、DocumentManagerを取得したら
// MongoDB ODM DocumentManager を取得
$dm = $this
->get('doctrine.odm.mongodb.document_manager');
4. Let's access!
HelloBundle/Controller/HelloController.php
煮るなり、焼くなりご自由に!
// 1.保存
// Userドキュメントを生成し、データを入れる
$user = new
Application¥SasayakiBundle¥Document¥User();
$user->setName('madapaja');
$dm->persist($user); // データを入れて
$dm->flush(); // 保存
4. Let's access!
HelloBundle/Controller/HelloController.php
煮るなり、焼くなりご自由に!
// 2.取得
$sasayaki = $dm
->getRepository(
‘Application¥SasayakiBundle
¥Document¥User')
->findByName("madapaja")
->getResults();
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();
Annotationで設定したIndexの作成
ID以外をインデックスされるように、@mongodb:Index アノテーションなどを
指定している場合、
などとして、Indexを作りましょう。
// Indexを作成
$dm->getSchemaManager()
->ensureIndexes();
最後に
MongoDBの開発は非常に活発です。
Shardingやレプリケーション、耐障害性などの向上、機能追加も予定(ver.1.7系、1.8~)されているようで、より運用しやすいプロダクトに成長し、使える幅が広がるのではないかと期待しています。
面白い情報などありましたら、twitterなどで教えてください!
MongoDB楽しい!
宣伝
アジア初となるMongoDBのカンファレンス
Mongo Tokyoが開催されます!
3月1日(火) 13:00~19:30
品川シーサイド楽天タワーにて
開発元である10genのエンジニアを含む講演が行われます。
詳細は:
http://mongodb.jp/ からリンクしてます
ありがとうございました!