Fix a bug introduced in pull request #799 that caused eager loading constraints to stop working.

This commit is contained in:
Franz Liedke 2012-07-12 23:16:22 +03:00
parent 1503aed7ce
commit 71f8e4acc0
1 changed files with 25 additions and 12 deletions

View File

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