From dd4ab7253120b90261c8a17d85aa1b24ac69079e Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Wed, 30 Mar 2022 19:58:05 -0400 Subject: [PATCH] SearchKit - Fix joins when RelationshipCache is base search entity --- ext/search_kit/Civi/Search/Admin.php | 4 ++-- ext/search_kit/tests/phpunit/Civi/Search/AdminTest.php | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ext/search_kit/Civi/Search/Admin.php b/ext/search_kit/Civi/Search/Admin.php index aa8ad865e7..d3070bc1a0 100644 --- a/ext/search_kit/Civi/Search/Admin.php +++ b/ext/search_kit/Civi/Search/Admin.php @@ -240,7 +240,7 @@ class Admin { $bridge = in_array('EntityBridge', $entity['type']) ? $entity['name'] : NULL; // Non-bridge joins directly between 2 entities - if (!$bridge) { + if ($entity['searchable'] !== 'bridge') { foreach ($references as $reference) { $keyField = $fields[$reference->getReferenceKey()] ?? NULL; if ( @@ -288,7 +288,7 @@ class Admin { } } // Bridge joins go through an intermediary table - elseif (!empty($entity['bridge'])) { + if ($bridge && !empty($entity['bridge'])) { foreach ($entity['bridge'] as $targetKey => $bridgeInfo) { $baseKey = $bridgeInfo['to']; $reference = self::getReference($targetKey, $references); diff --git a/ext/search_kit/tests/phpunit/Civi/Search/AdminTest.php b/ext/search_kit/tests/phpunit/Civi/Search/AdminTest.php index 814136ecc1..2bd83b68b5 100644 --- a/ext/search_kit/tests/phpunit/Civi/Search/AdminTest.php +++ b/ext/search_kit/tests/phpunit/Civi/Search/AdminTest.php @@ -61,6 +61,10 @@ class AdminTest extends \PHPUnit\Framework\TestCase implements HeadlessInterface $relationshipJoins[0]['defaults'] ); + $relationshipCacheJoins = $joins['RelationshipCache']; + $this->assertCount(4, $relationshipCacheJoins); + $this->assertEquals(['RelationshipType', 'Contact', 'Contact', 'Case'], array_column($relationshipCacheJoins, 'entity')); + $eventParticipantJoins = \CRM_Utils_Array::findAll($joins['Event'], [ 'entity' => 'Participant', 'alias' => 'Event_Participant_event_id', -- 2.25.1