Merge pull request #946 from franzliedke/patch-23

Fix eager loading constraints
This commit is contained in:
Taylor Otwell 2012-07-24 06:09:41 -07:00
commit 5c3ede74d9
2 changed files with 20 additions and 24 deletions

View File

@ -257,26 +257,21 @@ public function _with($includes)
{
$includes = (array) $includes;
$all_includes = array();
$this->includes = array();
foreach($includes as $include)
foreach ($includes as $relationship => $constraints)
{
$nested = explode('.', $include);
$inc = array();
foreach($nested as $relation)
// When eager loading relationships, constraints may be set on the eager
// load definition; however, is none are set, we need to swap the key
// and the value of the array since there are no constraints.
if (is_numeric($relationship))
{
$inc[] = $relation;
$all_includes[] = implode('.', $inc);
list($relationship, $constraints) = array($constraints, null);
}
$this->includes[$relationship] = $constraints;
}
//remove duplicates and reset the array keys.
$this->includes = array_values(array_unique($all_includes));
return $this;
}

View File

@ -217,22 +217,23 @@ protected function nested_includes($relationship)
*/
protected function model_includes()
{
$includes = array();
$relationships = array_keys($this->model->includes);
$implicits = array();
foreach ($this->model->includes as $relationship => $constraints)
foreach ($relationships as $relationship)
{
// When eager loading relationships, constraints may be set on the eager
// load definition; however, is none are set, we need to swap the key
// and the value of the array since there are no constraints.
if (is_numeric($relationship))
{
list($relationship, $constraints) = array($constraints, null);
}
$parts = explode('.', $relationship);
$includes[$relationship] = $constraints;
$prefix = '';
foreach ($parts as $part)
{
$implicits[$prefix.$part] = NULL;
$prefix .= $part.'.';
}
}
return $includes;
// Add all implicit includes to the explicit ones
return $this->model->includes + $implicits;
}
/**