public function saveGroupAccess($connection, $entity, $groupIds) { //todo verify relations $groupIds = array_values(array_unique($groupIds, SORT_REGULAR)); $entityTypeObj = ECP\EntityTypeQuery::create()->filterByName($this->entityType)->findOne(); $entityId = $entity->getId(); $groupAccessEntities = ECP\GroupAccessQuery::create()->filterByEntityId($entityId)->filterByEntityType($entityTypeObj)->find(); $existingGroups = array(); foreach ($groupAccessEntities as $groupAccessEntity) { $groupId = $groupAccessEntity->getGroupId(); if (in_array($groupId, $groupIds)) { $existingGroups[] = $groupId; } else { $groupAccessEntity->delete($connection); } } foreach ($groupIds as $groupId) { if (!in_array($groupId, $existingGroups)) { $groupAccessEntity = new ECP\GroupAccess(); $groupAccessEntity->setEntityType($entityTypeObj); $groupAccessEntity->setEntityId($entityId); $groupAccessEntity->setGroupId($groupId); $groupAccessEntity->save($connection); } } }