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.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							1.7 KiB
						
					
					
				| <?php | |
| /** | |
|  * @link http://www.yiiframework.com/ | |
|  * @copyright Copyright (c) 2008 Yii Software LLC | |
|  * @license http://www.yiiframework.com/license/ | |
|  */ | |
|  | |
| namespace yii\mongodb\file; | |
|  | |
| use Yii; | |
|  | |
| /** | |
|  * Query represents Mongo "find" operation for GridFS collection. | |
|  * | |
|  * Query behaves exactly as regular [[\yii\mongodb\Query]]. | |
|  * Found files will be represented as arrays of file document attributes with | |
|  * additional 'file' key, which stores [[\MongoGridFSFile]] instance. | |
|  * | |
|  * @author Paul Klimov <klimov.paul@gmail.com> | |
|  * @since 2.0 | |
|  */ | |
| class Query extends \yii\mongodb\Query | |
| { | |
| 	/** | |
| 	 * Returns the Mongo collection for this query. | |
| 	 * @param \yii\mongodb\Connection $db Mongo connection. | |
| 	 * @return Collection collection instance. | |
| 	 */ | |
| 	public function getCollection($db = null) | |
| 	{ | |
| 		if ($db === null) { | |
| 			$db = Yii::$app->getComponent('mongodb'); | |
| 		} | |
| 		return $db->getFileCollection($this->from); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @param \MongoGridFSCursor $cursor Mongo cursor instance to fetch data from. | |
| 	 * @param boolean $all whether to fetch all rows or only first one. | |
| 	 * @param string|callable $indexBy value to index by. | |
| 	 * @return array|boolean result. | |
| 	 * @see Query::fetchRows() | |
| 	 */ | |
| 	protected function fetchRowsInternal($cursor, $all, $indexBy) | |
| 	{ | |
| 		$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; | |
| 			} | |
| 		} | |
| 		return $result; | |
| 	} | |
| } |