FuelPHPをやってみる (26) - MongoDBを使う -
超久々に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を使って取得したデータ