私は Kohana の php フレームワーク (2.x) を使用しています。関数を介して Mongo にアクセスし、結果をオブジェクトとして返すヘルパーが必要です。これが実際にデータベースにクエリを実行するには、ローカル クラスでデータベースに接続する必要がありますか? $this->mongo->collection
または、接続されたオブジェクトから渡すことはできますか? 私のコードにはエラーや誤解があると確信しているので、遠慮なく指摘してください。
class mongoaccess
{
function __construct()
{
try
{
//$m = new MongoClient(); // not sure how to go about the connection
//$this->mongo = Mongo_Database::instance();
}
catch (Exception $e)
{
error_log('Caught exception: ' . $e->getMessage() . "\n");
}
}
/**
* Converts an array to an object.
* Multiple nesting supported.
* @param $array | type: array | Ex: array('newvariable' => 'value')
*/
public static function arrayToObject($array)
{
$object = new stdClass;
foreach($array as $key => $value)
{
if(is_array($value))
{
$object->{$key} = arrayToObject($value); //Recursive
} else {$object->{$key} = $value;}
}
return $object;
}
/** Provides easy access to findOne()
* @param $collection | type: object member | Ex: $this->mongo->usersinapps
* @param $query | type: array | Ex: array('keyy' => 'valuee')
*/
public static function getObjectFromMongo($collection, $query)
{
if (empty($query) || !is_array($query) || empty($collection))
{return null;}
$collection->findOne($query);
$object = new stdClass();
$object = mongoaccess::arrayToObject($query);
return $object;
}
// needs review
/** Provides easy access to find() - iterates through cursor and returns array of objects
* @param $collection | type: object member | Ex: $this->mongo->usersinapps
* @param $query | type: array | Ex: array('keyy' => 'valuee')
*/
public static function getObjectsFromMongo($collection, $query)
{
if (empty($query) || !is_array($query) || empty($collection))
{return null;}
$objectArray = array();
$mongoResultsCursor = $collection->find($query);
while ($mongoResultsCursor->hasNext())
{
$document = $mongoResultsCursor->getNext();
array_push($objectArray, $document);
}
$object = mongoaccess::arrayToObject($objectArray);
return $object;
}
}