$entities) { foreach ($entities as $entityValues) { $entityValues = $this->replaceReferences($entityValues); $params = ['values' => $entityValues, 'checkPermissions' => FALSE]; $result = civicrm_api4($entityName, 'create', $params); if (isset($entityValues['@ref'])) { $this->references[$entityValues['@ref']] = $result->first(); } } } } /** * @param $name * * @return null|mixed */ protected function getReference($name) { return $this->references[$name] ?? NULL; } /** * @param array $entityValues * * @return array */ private function replaceReferences($entityValues) { foreach ($entityValues as $name => $value) { if (is_array($value)) { $entityValues[$name] = $this->replaceReferences($value); } elseif (substr($value, 0, 4) === '@ref') { $referenceName = substr($value, 5); list ($reference, $property) = explode('.', $referenceName); $entityValues[$name] = $this->references[$reference][$property]; } } return $entityValues; } }