public function getObject($objectKey)
{
$objectKey = Objects::normalizeObjectKey($objectKey);
if (false === strpos($objectKey, '/')) {
return null;
}
list($bundleName, $objectName) = explode('/', $objectKey);
if ('bundle' !== substr($bundleName, -6)) {
$bundleName .= 'bundle';
}
if (!($config = $this->getConfig($bundleName))) {
throw new BundleNotFoundException(sprintf('Bundle `%s` not found. [%s]', $bundleName, $objectKey));
}
return $config->getObject($objectName);
}
/** * @param Configs $configs * @return RelationDefinition|null * @throws \Jarves\Exceptions\ModelBuildException */ protected function getRelation(Configs $configs) { $field = $this->getFieldDefinition(); $columns = []; $foreignObjectDefinition = $configs->getObject($field->getObject()); if (!$foreignObjectDefinition) { throw new ModelBuildException(sprintf('ObjectKey `%s` not found for field `%s` in object `%s`', $field->getObject(), $field->getId(), $field->getObjectDefinition()->getId())); } $relation = new RelationDefinition(); $relation->setName($field->getId()); $relation->setType($field->getObjectRelation()); $relation->setForeignObjectKey($field->getObject()); $relation->setWithConstraint($field->getObjectRelationWithConstraint()); if ($refName = $field->getObjectRefRelationName()) { $relation->setRefName($refName); } foreach ($foreignObjectDefinition->getPrimaryKeys() as $pk) { $fieldColumns = $pk->getFieldType()->getColumns(); $columns = array_merge($columns, $fieldColumns); } if (!$columns) { return null; } $references = []; foreach ($columns as $column) { $reference = new RelationReferenceDefinition(); $localColumn = clone $column; $localColumn->setName($field->getId() . ucfirst($column->getName())); $reference->setLocalColumn($localColumn); $reference->setForeignColumn($column); $references[] = $reference; } $relation->setReferences($references); return $relation; }