21
Symfony2から Doctrine MongoDB ODM使ってみる 2011-1-15 Symfony2勉強会 岩崎 晃司(@madapaja

Symfony2からdoctrine mongo db odmを使ってみる

Embed Size (px)

DESCRIPTION

※暫定版なので、まだ更新するかも。。。 2011-1-15 #symfony2study でのLT発表資料

Citation preview

Page 1: Symfony2からdoctrine mongo db odmを使ってみる

Symfony2からDoctrine MongoDB ODMを

使ってみる

2011-1-15Symfony2勉強会

岩崎 晃司(@madapaja)

Page 2: Symfony2からdoctrine mongo db odmを使ってみる

自己紹介

名前 : 岩崎晃司

誕生日 : 1981/11/6 (ぎりぎり20代)

twitter : @madapaja

blog : http://d.hatena.ne.jp/ja9/

仕事では主にPHPを使ってます。

SymfonyもMongoDBも、初心者ですが、、、

Page 3: Symfony2からdoctrine mongo db odmを使ってみる

Symfony2からDoctrine MongoDB ODMを

使ってみる

Page 4: Symfony2からdoctrine mongo db odmを使ってみる

MongoDB

ドキュメント指向データベースに属するDBです。

詳細は割愛します。

Page 5: Symfony2からdoctrine mongo db odmを使ってみる

Doctrine MongoDB ODM

ODM=Object Document Mapper

Doctrine2のMongoDB版みたいなもの

です

Symfony2でサポートされています

Sandboxをダウンロードすると、もれなく

ついてきます

Page 6: Symfony2からdoctrine mongo db odmを使ってみる

環境を用意する

Symfony2が動く環境を用意します

Symfony2のSandboxを用意します

MongoDBが必要です

PHP Mongo Extensionが必要です

sudo pecl install mongo でインストール

php.ini に extension=mongo.so を追記

httpdなどの再起動が必要かもね

Page 7: Symfony2からdoctrine mongo db odmを使ってみる

使い方

Doctrine2 ORM とほぼ同じように使えるよ

1. Doctrine MongoDB Bundleを有効に

2. configに設定を追加

3. Document(ORMでいうEntity)クラスを

作る

4. Let's access!

Page 8: Symfony2からdoctrine mongo db odmを使ってみる

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(),

// ↑コメントアウトを解除し、有効に:

Page 9: Symfony2からdoctrine mongo db odmを使ってみる

2. configに設定を追加

app/config/config.yml

最小限の設定

## MongoDB ODMの設定を追記。

doctrine_odm.mongodb:

mappings:

HelloBundle: ~

MongoDB ODM を

使用するバンドル名

Page 10: Symfony2からdoctrine mongo db odmを使ってみる

2. configに設定を追加

app/config/config.yml

最小限の設定

## MongoDB ODMの設定を追記。

doctrine_odm.mongodb:

mappings:

HelloBundle: ~

MongoDB ODM を

使用するバンドル名

最小限の設定の場合、mongodb://localhost:27017のdefaultデータベースに接続するよ

Page 11: Symfony2からdoctrine mongo db odmを使ってみる

2. configに設定を追加

app/config/config.yml

間違いが起きないように、最低限以下のような設定をした方がいいと思います。

## MongoDB ODMの設定を追記。

doctrine_odm.mongodb:

mappings:

HelloBundle: ~

server: mongodb://localhost:27017

default_database: my_db_name

Page 12: Symfony2からdoctrine mongo db odmを使ってみる

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 … …

}

Page 13: Symfony2からdoctrine mongo db odmを使ってみる

3.Documentクラスを作る

ちょっとした事。

いつでも@mongodb:

/**

* @mongodb:Indexes({

* @mongodb:Index(keys={"name"="asc"})

* })

*/ 油断して忘れない

間違って、@mongodb:Timestamp を利用しない

/** @mongodb:Date */

protected $at;

普通の日時保存にはDate型を使う

Page 14: Symfony2からdoctrine mongo db odmを使ってみる

4. Let's access!

HelloBundle/Controller/HelloController.php

落ち着いて、DocumentManagerを取得したら

// MongoDB ODM DocumentManager を取得

$dm = $this

->get('doctrine.odm.mongodb.document_manager');

Page 15: Symfony2からdoctrine mongo db odmを使ってみる

4. Let's access!

HelloBundle/Controller/HelloController.php

煮るなり、焼くなりご自由に!

// 1.保存

// Userドキュメントを生成し、データを入れる

$user = new

Application¥SasayakiBundle¥Document¥User();

$user->setName('madapaja');

$dm->persist($user); // データを入れて

$dm->flush(); // 保存

Page 16: Symfony2からdoctrine mongo db odmを使ってみる

4. Let's access!

HelloBundle/Controller/HelloController.php

煮るなり、焼くなりご自由に!

// 2.取得

$sasayaki = $dm

->getRepository(

‘Application¥SasayakiBundle

¥Document¥User')

->findByName("madapaja")

->getResults();

Page 17: Symfony2からdoctrine mongo db odmを使ってみる

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();

Page 18: Symfony2からdoctrine mongo db odmを使ってみる

Annotationで設定したIndexの作成

ID以外をインデックスされるように、@mongodb:Index アノテーションなどを

指定している場合、

などとして、Indexを作りましょう。

// Indexを作成

$dm->getSchemaManager()

->ensureIndexes();

Page 19: Symfony2からdoctrine mongo db odmを使ってみる

最後に

MongoDBの開発は非常に活発です。

Shardingやレプリケーション、耐障害性などの向上、機能追加も予定(ver.1.7系、1.8~)されているようで、より運用しやすいプロダクトに成長し、使える幅が広がるのではないかと期待しています。

面白い情報などありましたら、twitterなどで教えてください!

MongoDB楽しい!

Page 20: Symfony2からdoctrine mongo db odmを使ってみる

宣伝

アジア初となるMongoDBのカンファレンス

Mongo Tokyoが開催されます!

3月1日(火) 13:00~19:30

品川シーサイド楽天タワーにて

開発元である10genのエンジニアを含む講演が行われます。

詳細は:

http://mongodb.jp/ からリンクしてます

Page 21: Symfony2からdoctrine mongo db odmを使ってみる

ありがとうございました!