Browse Source

Move automatic relationship parsing to Eloquent's query class.

Franz Liedke 12 years ago
parent
commit
78920c5d27
2 changed files with 30 additions and 22 deletions
  1. 2 20
      laravel/database/eloquent/model.php
  2. 28 2
      laravel/database/eloquent/query.php

+ 2 - 20
laravel/database/eloquent/model.php

@@ -257,7 +257,7 @@ abstract class Model {
 	{
 		$includes = (array) $includes;
 
-		$given_includes = array();
+		$this->includes = array();
 
 		foreach ($includes as $relationship => $constraints)
 		{
@@ -269,27 +269,9 @@ abstract class Model {
 				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;
 	}
 

+ 28 - 2
laravel/database/eloquent/query.php

@@ -127,7 +127,7 @@ class Query {
 
 		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 @@ class Query {
 	{
 		$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 @@ class Query {
 		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.
 	 *