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); | |
| 		} | |
| 	} | |
| } |