| 
					
				 | 
			
			
				@@ -1,4 +1,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<?php namespace Laravel\Database\Eloquent; use Laravel\Database; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<?php namespace Laravel\Database\Eloquent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use Laravel\Database; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use Laravel\Database\Eloquent\Relationships\Has_Many_And_Belongs_To; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class Query { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -54,7 +57,7 @@ class Query { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public function first($columns = array('*')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$results = $this->hydrate($this->model, $this->table->take(1)->get($columns, false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$results = $this->hydrate($this->model, $this->table->take(1)->get($columns)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return (count($results) > 0) ? head($results) : null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -63,12 +66,12 @@ class Query { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * Get all of the model results for the query. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @param  array  $columns 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 * @param  bool   $include 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param  bool   $keyed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @return array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public function get($columns = array('*'), $include = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public function get($columns = array('*'), $keyed = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return $this->hydrate($this->model, $this->table->get($columns), $include); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return $this->hydrate($this->model, $this->table->get($columns), $keyed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -97,9 +100,10 @@ class Query { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @param  Model  $model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @param  array  $results 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param  bool   $keyed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @return array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public function hydrate($model, $results, $include = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public function hydrate($model, $results, $keyed = true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		$class = get_class($model); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -124,10 +128,20 @@ class Query { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$new->original = $new->attributes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			$models[$result[$this->model->key()]] = $new; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// Typically, the resulting models are keyed by their primary key, but it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// may be useful to not do this in some circumstances such as when we 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// are eager loading a *-to-* relationships which has duplicates. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ($keyed) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$models[$result[$this->model->key()]] = $new; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$models[] = $new; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ($include and count($results) > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (count($results) > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			foreach ($this->model_includes() as $relationship => $constraints) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -183,12 +197,19 @@ class Query { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$query->table->where_nested($constraints); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// Before matching the models, we will initialize the relationships 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// to either null for single-value relationships or an array for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// the multi-value relationships as their baseline value. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		$query->initialize($results, $relationship); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$query->match($relationship, $results, $query->get()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// If we're eager loading a many-to-many relationship we will disable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// the primary key indexing on the hydration since there could be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// roles shared across users and we don't want to overwrite. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ( ! $query instanceof Has_Many_And_Belongs_To) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$query->match($relationship, $results, $query->get()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$query->match($relationship, $results, $query->get(array('*'), false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/** 
			 |