From 14e9488cf9faac9ac573b4b7dd5bd588baafd9c8 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Thu, 28 Jun 2012 15:19:17 -0500 Subject: [PATCH] Speed up eager loading of many to many. --- .../relationships/has_many_and_belongs_to.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/laravel/database/eloquent/relationships/has_many_and_belongs_to.php b/laravel/database/eloquent/relationships/has_many_and_belongs_to.php index 52276a5f..28e8c19f 100644 --- a/laravel/database/eloquent/relationships/has_many_and_belongs_to.php +++ b/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(); + $dictionary = array(); + + foreach ($children as $child) + { + $dictionary[$child->pivot->$foreign][] = $child; + } + 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]; + } } }