From 78920c5d270f0abcf3eccf557fea88d83d3470ed Mon Sep 17 00:00:00 2001 From: Franz Liedke Date: Thu, 12 Jul 2012 22:32:43 +0200 Subject: [PATCH] Move automatic relationship parsing to Eloquent's query class. --- laravel/database/eloquent/model.php | 22 ++------------------- laravel/database/eloquent/query.php | 30 +++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/laravel/database/eloquent/model.php b/laravel/database/eloquent/model.php index 9a90279f..32c504c5 100644 --- a/laravel/database/eloquent/model.php +++ b/laravel/database/eloquent/model.php @@ -257,7 +257,7 @@ public function _with($includes) { $includes = (array) $includes; - $given_includes = array(); + $this->includes = array(); foreach ($includes as $relationship => $constraints) { @@ -269,27 +269,9 @@ public function _with($includes) list($relationship, $constraints) = array($constraints, null); } - $given_includes[$relationship] = $constraints; + $this->includes[$relationship] = $constraints; } - $relationships = array_keys($given_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; } diff --git a/laravel/database/eloquent/query.php b/laravel/database/eloquent/query.php index 25fa4fbc..56fd15c7 100644 --- a/laravel/database/eloquent/query.php +++ b/laravel/database/eloquent/query.php @@ -127,7 +127,7 @@ public function hydrate($model, $results) if (count($results) > 0) { - foreach ($this->model->includes as $relationship => $constraints) + foreach ($this->model_includes() as $relationship => $constraints) { // If the relationship is nested, we will skip loading it here and let // the load method parse and set the nested eager loads on the right @@ -196,7 +196,7 @@ protected function nested_includes($relationship) { $nested = array(); - foreach ($this->model->includes as $include => $constraints) + foreach ($this->model_includes() as $include => $constraints) { // To get the nested includes, we want to find any includes that begin // the relationship and a dot, then we will strip off the leading @@ -210,6 +210,32 @@ protected function nested_includes($relationship) return $nested; } + /** + * Get the eagerly loaded relationships for the model. + * + * @return array + */ + protected function model_includes() + { + $relationships = array_keys($this->model->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 + return $this->model->includes + $implicits; + } + /** * Get a fluent query builder for the model. *