Browse Source

Speed up eager loading of many to many.

Taylor Otwell 12 years ago
parent
commit
14e9488cf9

+ 12 - 5
laravel/database/eloquent/relationships/has_many_and_belongs_to.php

@@ -325,14 +325,21 @@ class Has_Many_And_Belongs_To extends Relationship {
 	{
 	{
 		$foreign = $this->foreign_key();
 		$foreign = $this->foreign_key();
 
 
+		$dictionary = array();
+
+		foreach ($children as $child)
+		{
+			$dictionary[$child->pivot->$foreign][] = $child;
+		}
+
 		foreach ($parents as &$parent)
 		foreach ($parents as &$parent)
 		{
 		{
-			$matching = array_filter($children, function($v) use (&$parent, $foreign)
-			{
-				return $v->pivot->$foreign == $parent->get_key();
-			});
+			$parent_key = $parent->get_key();
 
 
-			$parent->relationships[$relationship] = array_values($matching);
+			if (isset($dictionary[$parent_key]))
+			{
+				$parent->relationships[$relationship] = $dictionary[$parent_key];
+			}
 		}
 		}
 	}
 	}