*/ class Person implements WhereBuilder { /** * @param CoreEntity $entity */ public function build(Entity $entity): ?WhereItem { $orBuilder = OrGroup::createBuilder(); $toCheck = false; if ($entity->get('firstName') || $entity->get('lastName')) { $orBuilder->add( Cond::and( Cond::equal( Cond::column('firstName'), $entity->get('firstName') ), Cond::equal( Cond::column('lastName'), $entity->get('lastName') ) ) ); $toCheck = true; } if ( ($entity->get('emailAddress') || $entity->get('emailAddressData')) && ( $entity->isNew() || $entity->isAttributeChanged('emailAddress') || $entity->isAttributeChanged('emailAddressData') ) ) { foreach ($this->getEmailAddressList($entity) as $emailAddress) { $orBuilder->add( Cond::equal( Cond::column('emailAddress'), $emailAddress ) ); $toCheck = true; } } if (!$toCheck) { return null; } return $orBuilder->build(); } /** * @return string[] */ private function getEmailAddressList(CoreEntity $entity): array { if ($entity->get('emailAddressData')) { /** @var EmailAddressGroup $eaGroup */ $eaGroup = $entity->getValueObject('emailAddress'); return $eaGroup->getAddressList(); } if ($entity->get('emailAddress')) { return [ $entity->get('emailAddress') ]; } return []; } }