Commit 8a687053 authored by Taylor Otwell's avatar Taylor Otwell

fix conflicts.

parents ee288a77 b7ac1b75
...@@ -3,7 +3,7 @@ ...@@ -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
*/ */
......
<?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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -124,10 +128,20 @@ class Query {
$new->original = $new->attributes; $new->original = $new->attributes;
// 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; $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,13 +197,20 @@ class Query { ...@@ -183,13 +197,20 @@ 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);
// 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()); $query->match($relationship, $results, $query->get());
} }
else
{
$query->match($relationship, $results, $query->get(array('*'), false));
}
}
/** /**
* Gather the nested includes for a given relationship. * Gather the nested includes for a given relationship.
......
...@@ -4,6 +4,8 @@ ...@@ -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 @@ ...@@ -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
......
...@@ -3,7 +3,7 @@ ...@@ -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
*/ */
......
...@@ -3,7 +3,7 @@ ...@@ -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
*/ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment