You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.0 KiB
82 lines
2.0 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yii\mongo\file; |
|
|
|
use Yii; |
|
use yii\helpers\Json; |
|
use yii\mongo\Exception; |
|
|
|
/** |
|
* Class Query |
|
* |
|
* @author Paul Klimov <klimov.paul@gmail.com> |
|
* @since 2.0 |
|
*/ |
|
class Query extends \yii\mongo\Query |
|
{ |
|
/** |
|
* Returns the Mongo collection for this query. |
|
* @param \yii\mongo\Connection $db Mongo connection. |
|
* @return Collection collection instance. |
|
*/ |
|
public function getCollection($db = null) |
|
{ |
|
if ($db === null) { |
|
$db = Yii::$app->getComponent('mongo'); |
|
} |
|
return $db->getFileCollection($this->from); |
|
} |
|
|
|
/** |
|
* Fetches rows from the given Mongo cursor. |
|
* @param \MongoCursor $cursor Mongo cursor instance to fetch data from. |
|
* @param boolean $all whether to fetch all rows or only first one. |
|
* @param string|callable $indexBy the column name or PHP callback, |
|
* by which the query results should be indexed by. |
|
* @throws Exception on failure. |
|
* @return array|boolean result. |
|
*/ |
|
protected function fetchRows(\MongoCursor $cursor, $all = true, $indexBy = null) |
|
{ |
|
$token = 'Querying: ' . Json::encode($cursor->info()); |
|
Yii::info($token, __METHOD__); |
|
try { |
|
Yii::beginProfile($token, __METHOD__); |
|
$result = []; |
|
if ($all) { |
|
foreach ($cursor as $file) { |
|
$row = $file->file; |
|
$row['file'] = $file; |
|
if ($indexBy !== null) { |
|
if (is_string($indexBy)) { |
|
$key = $row[$indexBy]; |
|
} else { |
|
$key = call_user_func($indexBy, $row); |
|
} |
|
$result[$key] = $row; |
|
} else { |
|
$result[] = $row; |
|
} |
|
} |
|
} else { |
|
if ($cursor->hasNext()) { |
|
$file = $cursor->getNext(); |
|
$result = $file->file; |
|
$result['file'] = $file; |
|
} else { |
|
$result = false; |
|
} |
|
} |
|
Yii::endProfile($token, __METHOD__); |
|
return $result; |
|
} catch (\Exception $e) { |
|
Yii::endProfile($token, __METHOD__); |
|
throw new Exception($e->getMessage(), (int)$e->getCode(), $e); |
|
} |
|
} |
|
} |