Pimcore\Model\Object\ClassDefinition\Data\Objectbricks::getDataForField PHP Method

getDataForField() private method

gets recursively attribute data from parent and fills objectData and metaData
private getDataForField ( $item, $key, $fielddefinition, $level, $baseObject, $getter, $objectFromVersion ) : mixed
$item
$key
$fielddefinition
return mixed
    private function getDataForField($item, $key, $fielddefinition, $level, $baseObject, $getter, $objectFromVersion)
    {
        $result = new \stdClass();
        $parent = Object\Service::hasInheritableParentObject($baseObject);
        $valueGetter = "get" . ucfirst($key);
        // relations but not for objectsMetadata, because they have additional data which cannot be loaded directly from the DB
        if (!$objectFromVersion && method_exists($fielddefinition, "getLazyLoading") && $fielddefinition->getLazyLoading() && !$fielddefinition instanceof Object\ClassDefinition\Data\ObjectsMetadata && !$fielddefinition instanceof Object\ClassDefinition\Data\MultihrefMetadata) {
            //lazy loading data is fetched from DB differently, so that not every relation object is instantiated
            if ($fielddefinition->isRemoteOwner()) {
                $refKey = $fielddefinition->getOwnerFieldName();
                $refId = $fielddefinition->getOwnerClassId();
            } else {
                $refKey = $key;
            }
            $relations = $item->getRelationData($refKey, !$fielddefinition->isRemoteOwner(), $refId);
            if (empty($relations) && !empty($parent)) {
                $parentItem = $parent->{"get" . ucfirst($this->getName())}();
                if (!empty($parentItem)) {
                    $parentItem = $parentItem->{$getter}();
                    if ($parentItem) {
                        return $this->getDataForField($parentItem, $key, $fielddefinition, $level + 1, $parent, $getter, $objectFromVersion);
                    }
                }
            }
            $data = [];
            if ($fielddefinition instanceof Object\ClassDefinition\Data\Href) {
                $data = $relations[0];
            } else {
                foreach ($relations as $rel) {
                    if ($fielddefinition instanceof Object\ClassDefinition\Data\Objects) {
                        $data[] = [$rel["id"], $rel["path"], $rel["subtype"]];
                    } else {
                        $data[] = [$rel["id"], $rel["path"], $rel["type"], $rel["subtype"]];
                    }
                }
            }
            $result->objectData = $data;
            $result->metaData['objectid'] = $baseObject->getId();
            $result->metaData['inherited'] = $level != 0;
        } else {
            $editmodeValue = null;
            if (!empty($item)) {
                $fieldValue = $item->{$valueGetter}();
                $editmodeValue = $fielddefinition->getDataForEditmode($fieldValue, $baseObject);
            }
            if ($fielddefinition->isEmpty($fieldValue) && !empty($parent)) {
                $backup = Object\AbstractObject::getGetInheritedValues();
                Object\AbstractObject::setGetInheritedValues(true);
                $parentItem = $parent->{"get" . ucfirst($this->getName())}()->{$getter}();
                Object\AbstractObject::setGetInheritedValues($backup);
                if (!empty($parentItem)) {
                    return $this->getDataForField($parentItem, $key, $fielddefinition, $level + 1, $parent, $getter, $objectFromVersion);
                }
            }
            $result->objectData = $editmodeValue;
            $result->metaData['objectid'] = $baseObject->getId();
            $result->metaData['inherited'] = $level != 0;
        }
        return $result;
    }