/** * This is a bit similar to a db-load based version of Person::IsNameMatch(). * It will utilize querying to find any and all Person objects that do a normalized name match based on the name item objects. * @param string $strFirstName * @param string $strLastName * @return Person[] */ public static function LoadArrayByNameMatch($strFirstName, $strLastName) { // Calculate the normalized name items were are using $strNameItemArray = NameItem::GetNormalizedArrayFromNameString($strFirstName . ' ' . $strLastName); // Create an Integer[] of NameItem IDs $intNameItemIdArray = array(); foreach ($strNameItemArray as $strNameItem) { $objNameItem = NameItem::LoadByName($strNameItem); if (!$objNameItem) { return array(); } $intNameItemIdArray[] = $objNameItem->Id; } // Iterate to setup the Condition and Clauses $objCondition = QQ::All(); $objClauses = array(); $intIndex = 0; foreach ($intNameItemIdArray as $intNameItemId) { $intIndex++; $strAlias = 'assn_' . $intIndex; if ($intIndex == 2) { $objClauses[] = QQ::Distinct(); } $objClauses[] = QQ::CustomFrom('person_nameitem_assn', $strAlias); $objCondition = QQ::AndCondition($objCondition, QQ::Equal(QQ::CustomNode($strAlias . '.person_id'), QQN::Person()->Id), QQ::Equal(QQ::CustomNode($strAlias . '.name_item_id'), $intNameItemId)); } return Person::QueryArray($objCondition, $objClauses); }
/** * Given an array of normalized name items, this will associate them all to a valid NameItem object. * If any particular NameItem object does not exist, it will be created. * @param string[] $strNameArray * @param Person $objPerson * @return void */ public static function AssociateNameItemArrayForPerson($strNameArray, Person $objPerson) { $intDoneArray = array(); foreach ($strNameArray as $strName) { $objNameItem = NameItem::LoadByName($strName); if (!$objNameItem) { $objNameItem = new NameItem(); $objNameItem->Name = $strName; $objNameItem->Save(); } if (!array_key_exists($objNameItem->Id, $intDoneArray)) { $objPerson->AssociateNameItem($objNameItem); $intDoneArray[$objNameItem->Id] = $objNameItem->Id; } } }