Skip to content
Snippets Groups Projects
Unverified Commit 7e069fd8 authored by lozeone's avatar lozeone Committed by GitHub
Browse files

MembershipManager::getMembership() performance improvement (#762)

Directly query og_membership table in ::getMembership() instead of loading all with ::getMemberships()
parent 556227ae
Branches 8.x-1.x
No related tags found
No related merge requests found
......@@ -133,10 +133,36 @@ class MembershipManager implements MembershipManagerInterface {
$user_id = $user_id->id();
}
foreach ($this->getMemberships($user_id, $states) as $membership) {
if ($membership->getGroupEntityType() === $group->getEntityTypeId() && $membership->getGroupId() === $group->id()) {
return $membership;
}
// When an empty array is passed, retrieve memberships with all possible
// states.
$states = $this->prepareConditionArray($states, OgMembership::ALL_STATES);
$cid = [
__METHOD__,
$group->getEntityTypeId(),
$group->id(),
$user_id,
implode('|', $states),
];
$cid = implode(':', $cid);
// Use cached result if it exists.
$membership_ids = $this->staticCache->get($cid)->data ?? [];
if (!$membership_ids) {
$query = $this->entityTypeManager
->getStorage('og_membership')
->getQuery()
->accessCheck()
->condition('entity_type', $group->getEntityTypeId())
->condition('entity_id', $group->id())
->condition('uid', $user_id)
->condition('state', $states, 'IN');
$membership_ids = $query->execute();
$this->cacheMembershipIds($cid, $membership_ids);
}
if ($memberships = $this->loadMemberships($membership_ids)) {
return reset($memberships);
}
// No membership matches the request.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment