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

Post on 18-Dec-2014

4.586 views 5 download

description

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

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

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/ からリンクしてます

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