Browse Source

fix conflicts.

Taylor Otwell 12 years ago
parent
commit
8a687053a8
5 changed files with 48 additions and 15 deletions
  1. 1 1
      artisan
  2. 33 12
      laravel/database/eloquent/query.php
  3. 12 0
      laravel/documentation/changes.md
  4. 1 1
      paths.php
  5. 1 1
      public/index.php

+ 1 - 1
artisan

@@ -3,7 +3,7 @@
  * Laravel - A PHP Framework For Web Artisans
  * Laravel - A PHP Framework For Web Artisans
  *
  *
  * @package  Laravel
  * @package  Laravel
- * @version  3.1.5
+ * @version  3.1.6
  * @author   Taylor Otwell <taylorotwell@gmail.com>
  * @author   Taylor Otwell <taylorotwell@gmail.com>
  * @link     http://laravel.com
  * @link     http://laravel.com
  */
  */

+ 33 - 12
laravel/database/eloquent/query.php

@@ -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 {
 class Query {
 
 
@@ -54,7 +57,7 @@ class Query {
 	 */
 	 */
 	public function first($columns = array('*'))
 	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;
 		return (count($results) > 0) ? head($results) : null;
 	}
 	}
@@ -63,12 +66,12 @@ class Query {
 	 * Get all of the model results for the query.
 	 * Get all of the model results for the query.
 	 *
 	 *
 	 * @param  array  $columns
 	 * @param  array  $columns
-	 * @param  bool   $include
+	 * @param  bool   $keyed
 	 * @return array
 	 * @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  Model  $model
 	 * @param  array  $results
 	 * @param  array  $results
+	 * @param  bool   $keyed
 	 * @return array
 	 * @return array
 	 */
 	 */
-	public function hydrate($model, $results, $include = true)
+	public function hydrate($model, $results, $keyed = true)
 	{
 	{
 		$class = get_class($model);
 		$class = get_class($model);
 
 
@@ -124,10 +128,20 @@ class Query {
 
 
 			$new->original = $new->attributes;
 			$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)
 			foreach ($this->model_includes() as $relationship => $constraints)
 			{
 			{
@@ -183,12 +197,19 @@ class Query {
 			$query->table->where_nested($constraints);
 			$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->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));
+		}
 	}
 	}
 
 
 	/**
 	/**

+ 12 - 0
laravel/documentation/changes.md

@@ -4,6 +4,8 @@
 
 
 - [Laravel 3.2](#3.2)
 - [Laravel 3.2](#3.2)
 - [Upgrading From 3.1](#upgrade-3.2)
 - [Upgrading From 3.1](#upgrade-3.2)
+- [Laravel 3.1.6](#3.1.6)
+- [Upgrading From 3.1.5](#upgrade-3.1.6)
 - [Laravel 3.1.5](#3.1.5)
 - [Laravel 3.1.5](#3.1.5)
 - [Upgrading From 3.1.4](#upgrade-3.1.5)
 - [Upgrading From 3.1.4](#upgrade-3.1.5)
 - [Laravel 3.1.4](#3.1.4)
 - [Laravel 3.1.4](#3.1.4)
@@ -37,6 +39,16 @@
 
 
 - Replace the **laravel** folder.
 - Replace the **laravel** folder.
 
 
+<a name="3.1.6"></a>
+## Laravel 3.1.6
+
+- Fixes many-to-many eager loading in Eloquent.
+
+<a name="upgrade-3.1.6"></a>
+## Upgrading From 3.1.5
+
+- Replace the **laravel** folder.
+
 <a name="3.1.5"></a>
 <a name="3.1.5"></a>
 ## Laravel 3.1.5
 ## Laravel 3.1.5
 
 

+ 1 - 1
paths.php

@@ -3,7 +3,7 @@
  * Laravel - A PHP Framework For Web Artisans
  * Laravel - A PHP Framework For Web Artisans
  *
  *
  * @package  Laravel
  * @package  Laravel
- * @version  3.1.5
+ * @version  3.1.6
  * @author   Taylor Otwell <taylorotwell@gmail.com>
  * @author   Taylor Otwell <taylorotwell@gmail.com>
  * @link     http://laravel.com
  * @link     http://laravel.com
  */
  */

+ 1 - 1
public/index.php

@@ -3,7 +3,7 @@
  * Laravel - A PHP Framework For Web Artisans
  * Laravel - A PHP Framework For Web Artisans
  *
  *
  * @package  Laravel
  * @package  Laravel
- * @version  3.1.5
+ * @version  3.1.6
  * @author   Taylor Otwell <taylorotwell@gmail.com>
  * @author   Taylor Otwell <taylorotwell@gmail.com>
  * @link     http://laravel.com
  * @link     http://laravel.com
  */
  */