読者です 読者をやめる 読者になる 読者になる

FuelPHPでMongoDBを使用する場合のサンプル

設定については下記URL参照。
http://fuelphp.jp/docs/1.5/classes/mongo/introduction.html

FuelPHPのMongoDBクラスを使用したデータ取得等のサンプル。

想定バージョン : FuelPHP 1.5

instance

<?php
$mongo = \Mongo_Db::instance();

get / get_one / get_where

データ取得系

<?php
// SELECT * FROM $collection_name WHERE type = 1;
$mongo->where(array('type' => 1));
$result1 = $mongo->get($collection_name);

// SELECT * FROM $collection_name WHERE type = 1 LIMIT 1;
$mongo->where(array('type' => 1));
$result2 = $mongo->get_one($collection_name);

// SELECT * FROM $collection_name WHERE type = 1 LIMIT $limit;
$result3 = $mongo->get_where($collection_name, where(array('type' => 1)), $limit);

get_cursor

結果を全て変数に格納するわけではなく、都度取得する形の為、データサイズを抑えられる。

<?php
$mongo->where(array('type' => 1));
$result = $mongo->get_cursor($collection_name)->skip(100)->limit(3);

var_dump($result->getNext()); // このタイミングで問い合わせが発生

// または

foreach ($result as $val) {
    var_dump($val); // このタイミングで問い合わせが発生
}

select

<?php
// SELECT name FROM $collection_name;
$mongo->select(array('name'));
$result = $mongo->get($collection_name);

// 上記とは逆に、nameを除外
$mongo->select(array(), array('name'));

WHERE条件

取得データの型とWHEREで指定する値の型が合っていないとひっかからない為注意

<?php
// SELECT * FROM $collection_name WHERE type = 1;
$mongo->where(array('type' => 1));
$result = $mongo->get($collection_name);

// WHERE type = 1 OR type = 2
$mongo->or_where(array('type' => 1))->or_where(array('type' => 2));

// WHERE type IN (1, 2)
$mongo->where_in('type', array(1, 2));

// typeに1,2,3が全て含まれるものが対象
$mongo->where_in_all('type', array(1, 2, 3));

// typeに1,2,3どの値も含まれないいないものが対象
$mongo->where_not_in('type', array(1, 2, 3));

// WHERE type > 5
$mongo->where_gt(array('type', 5));

// WHERE type >= 5
$mongo->where_gte(array('type', 5));

// WHERE type < 10;
$mongo->where_lt(array('type', 10));

// WHERE type <= 10
$mongo->where_lte(array('type', 10));

// WHERE type BETWEEN 5 AND 10;
$mongo->where_between('type', 5, 10);

// WHERE type > 5 AND type < 10;
$mongo->where_between_ne('type', 5, 10);

// WHERE type <> 1;
$mongo->where_ne('type', 1);

// WHERE name LIKE '%fran%';
$mongo->like('name', 'fran', 'im', true, true);

※likeの3番目の引数についてはmethod_likeを参照

count

<?php
// SELECT COUNT(*) FROM $collection_name;
$num = $mongo->count($collection_name);

insert / update / update_all / delete

更新系

<?php
/*
 * INSERT INTO $collection_name
 *   (name, surname, email)
 * VALUES
 *   ('John', 'Doe', 'dont.em@ilme.com');
 */
$insert_id = $mongo->insert($collection_name, array(
    'name' => 'John',
    'surname' => 'Doe',
    'email' => 'dont.em@ilme.com',
));

/*
 * UPDATE
 *   $collection_name
 * SET
 *   surname = 'Doe2'
 * WHERE
 *   name => 'John'
 * LIMIT 1;
 */
$bool = $mongo->where(array('name' => 'John'))->update($collection_name, array(
    'surname' => 'Doe2',
));

/*
 * UPDATE
 *   $collection_name
 * SET
 *   surname = 'Doe3'
 * WHERE
 *   name => 'John';
 */
$bool = $mongodb->where(array('name' => 'John'))->update_all($collection_name, array(
    'surname' => 'Doe3',
));

/*
 * DELETE FROM $collection_name WHERE name = 'John' LIMIT 1;
 */
$bool = $mongodb->where(array('name' => 'John'))->delete($collection_name);

/*
 * DELETE FROM $collection_name WHERE name = 'John';
 */
$bool = $mongodb->where(array('name' => 'John'))->delete_all($collection_name);