Doctrine2 экспортирует сущность в массив

я имеюProduct сущность со многими к одномуCategory юридическое лицо. Мне нужен магазинProduct в сессии. Прежде всего я пытаюсь реализовать\Serializable интерфейс на продукт. Как я должен сериализовать мои связанныеCategory юридическое лицо? Должен ли я также реализовать\Serializable интерфейс?

Я читал, что сериализация в доктрине очень болезненная операция, и я думаю об этом:

Можем ли мы получить необработанные значения от сущности? Именно те данные, которые хранятся в базе данных. Если мы можем получить эти значения, мы можем сохранить их где угодно и воссоздать объект!

Я читаю код doctrine2 и нахожу методDoctrine\ORM\Internal\Hydration\ObjectHydrator:hydrateRowData но это'с защитой. Есть ли публичный API для этого?

Обновить:

Я просто копирую пасту и интегрирую некоторый код из BasicEntityPersister, и это, кажется, работает.

    $product = $productsRepository->find($id);

    if (!$product) {
        throw $this->createNotFoundException('No product found for id ' . $id);
    }

    $uow = $em->getUnitOfWork();
    $entityPersister = $uow->getEntityPersister(get_class($product));
    $classMetadata = $entityPersister->getClassMetadata();

    $originalData = $uow->getOriginalEntityData($product);

    $result = array();
    foreach ($originalData as $field => $value) {
        if (isset($classMetadata->associationMappings[$field])) {
            $assoc = $classMetadata->associationMappings[$field];

            // Only owning side of x-1 associations can have a FK column.
            if ( ! $assoc['isOwningSide'] || ! ($assoc['type'] & \Doctrine\ORM\Mapping\ClassMetadata::TO_ONE)) {
                continue;
            }

            if ($value !== null) {
                $newValId = $uow->getEntityIdentifier($value);
            }

            $targetClass = $em->getClassMetadata($assoc['targetEntity']);
            $owningTable = $entityPersister->getOwningTable($field);

            foreach ($assoc['joinColumns'] as $joinColumn) {
                $sourceColumn = $joinColumn['name'];
                $targetColumn = $joinColumn['referencedColumnName'];

                if ($value === null) {
                    $result[$owningTable][$sourceColumn] = null;
                } else if ($targetClass->containsForeignIdentifier) {
                    $result[$owningTable][$sourceColumn] = $newValId[$targetClass->getFieldForColumn($targetColumn)];
                } else {
                    $result[$owningTable][$sourceColumn] = $newValId[$targetClass->fieldNames[$targetColumn]];
                }
            }
        } elseif (isset($classMetadata->columnNames[$field])) {
            $columnName = $classMetadata->columnNames[$field];
            $result[$entityPersister->getOwningTable($field)][$columnName] = $value;
        }
    }

    print_r($result);

В$result у нас есть сырые ценности. Теперь нам нужен способ создания объекта по этому массиву.

Ответы на вопрос(2)

Ваш ответ на вопрос