FuelPHPをやってみる (26) - MongoDBを使う -

2013-01-21T00:00:00+00:00 FuelPHP MongoDB PHP

超久々にFuelPHPを触って見てる。タイトル通り、FuelPHPからMongoDBを使うネタ。まぁドキュメントに書いてる通り進めてるだけなので、詳しくはそれ読めと

ちなみにここからFuelPHP1.5ベースで検証

インストール

FuelPHPのMongo_Dbパッケージ自体がPECLモジュールのmongoが入ってないとダメらしいので入れておく

設定

fuel/app/config/db.phpを設定する

<?php

return array(
    "mongo" => array(
        "default" => array(
            "hostname" => "127.0.0.1",
            "database" => "sample"
        )
    )
);

fuel/app/classes/controller/home.php

あとは普通にMongo_Dbクラスを使ってごにょごにょするだけ

<?php

class Controller_Home extends Controller {
    public function get_index() {
        $mdb = Mongo_Db::instance();

        return Response::forge($mdb->limit(1)->get("samples"));
    }
}

余談: DBRefは扱えるのか

現状だと参照するAPIが存在しない模様なので、そういう処理はpecl:mongoのMongoDBRefを使ってごにょごにょする方法以外無さそう

だけど、それをやるには既存するコネクション(というかデータベースインスタンス)を参照出来た方が良いけど、FuelPHPのMongo_Dbはデータベースインスタンス自体がprotectedで外部からアクセス出来ない。なのでMongo_Dbを継承したクラスを利用する

<?php

class SampleMongoDB extends Fuel\CoreMongo_Db {
    public function is_dbref($ref) {
        return MongoDBRef::isRef($ref);
    }

    public function get_dbref($ref) {
        if ($this->is_dbref($ref)) {
            return MongoDBRef::get($this->db, $ref);
        }

        return null;
    }
}

class Controller_Home extends Controller {
    public function get_index() {
        $mdb = SampleMongoDB::instance();
        $samples = $mdb->get("samples");

        $debugs = [];

        foreach ($samples as &$sample) {
            $debugs[] = $sample;

            if (!isset($sample["ref"])) {
                continue;
            }

            $ref = $sample["ref"];

            if (!$mdb->is_dbref($ref)) {
                continue;
            }

            $debugs[]  = $mdb->get_dbref($ref);
        }

        Debug::dump($debugs);
    }
}

な感じで使えば良いんじゃねーかと。ちなみにこれをやると

というようなアウトプットになる。一番最後のがDBRefを使って取得したデータ

UbuntuとAndroidをbluetooth RFCOMMで通信する UbuntuでAndroidの動作画面を動画で録画する方法