/** * Pobranie wszystkich grup z dziedziczeniem * * @return array */ public function getGroups() { $groupModel = new Group(); $groupParentsModel = new GroupGroup(); $groups = $groupModel->fetchAll("ghost = false ", 'priority asc')->toArray(); $groupParents = $groupParentsModel->fetchAll()->toArray(); $groupsArray = array(); foreach ($groups as $group) { $group['parents']['role'] = array(); $groupsArray[$group['id']] = $group; } foreach ($groupParents as $parent) { if (isset($groupsArray[$parent['id_group']])) { $groupsArray[$parent['id_group']]['parents']['group'][] = $parent['id_parent']; } } return $groupsArray; }
/** * Pobranie wszystkich grup z dziedziczeniem * * @return array */ public function getGroups() { $cm = $this->getBootstrap()->getResource('cachemanager'); $cache = $cm->getCache('rolecache'); $cache_id = 'GroupsArrayCaache'; if (!($groupsArray = $cache->load($cache_id))) { $groupModel = new Group(); $groupParentsModel = new GroupGroup(); $groups = $groupModel->getAdapter()->query('WITH RECURSIVE Groups (id, priority, child_id) AS ( SELECT id, priority, null::bigint as child_id FROM "group" UNION ALL SELECT g.id, g.priority, p.id as child_id FROM "group" g INNER JOIN group_group as gg ON g.id = gg.id_group INNER JOIN Groups p ON gg.id_parent = p.id ) SELECT * FROM Groups ORDER BY priority;')->fetchAll(); // $groups = $groupModel->fetchAll("ghost = false ", 'priority asc')->toArray(); $groupParents = $groupParentsModel->fetchAll()->toArray(); $groupsArray = array(); foreach ($groups as $group) { $group['parents']['role'] = array(); $groupsArray[$group['id']] = $group; } foreach ($groupParents as $parent) { if (isset($groupsArray[$parent['id_group']])) { $groupsArray[$parent['id_group']]['parents']['group'][$parent['id_parent']] = array('id' => $parent['id_parent'], 'priority' => $groupsArray[$parent['id_group']]['priority']); } } $cache->save($groupsArray, $cache_id); } return $groupsArray; }