From 1057436b7c483c60b3c128fab993a3b78fac7093 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Wed, 15 Dec 2010 16:28:18 -0800 Subject: Cache the result of User_Model::groups() and Group_Model::users() and invalidate it on save/delete for efficiency. Fixes #1529. --- modules/user/models/group.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'modules/user/models/group.php') diff --git a/modules/user/models/group.php b/modules/user/models/group.php index 17d9320b..66c9aafc 100644 --- a/modules/user/models/group.php +++ b/modules/user/models/group.php @@ -19,6 +19,7 @@ */ class Group_Model_Core extends ORM implements Group_Definition { protected $has_and_belongs_to_many = array("users"); + protected $users_cache = null; /** * @see ORM::delete() @@ -28,10 +29,14 @@ class Group_Model_Core extends ORM implements Group_Definition { module::event("group_before_delete", $this); parent::delete($id); module::event("group_deleted", $old); + unset($this->users_cache); } public function users() { - return $this->users->find_all(); + if (!$this->users_cache) { + $this->users_cache = $this->users->find_all(); + } + return $this->users_cache; } /** @@ -60,6 +65,7 @@ class Group_Model_Core extends ORM implements Group_Definition { module::event("group_updated", $original, $this); } + unset($this->users_cache); return $this; } -- cgit v1.2.3