Jarves\Admin\FieldTypes\TypeObject::getRelation PHP Method

getRelation() protected method

protected getRelation ( Configs $configs ) : RelationDefinition | null
$configs Jarves\Configuration\Configs
return RelationDefinition | null
    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;
    }