BonBonSlick
@BonBonSlick
Junior Web Developer Trainee

Как намекнуть Doctrine / Unit of Work что работаем с существующими данными после сериализации?

У нас есть сущность, мы получаем ее из БД
public function find(string $id): ?DomainEntity {
        /** @var DoctrineEntity|null $entity */
        $entity = $this->findOneBy(['id' => $id]);
        if (true === $entity instanceof DoctrineEntity) {
            $entity = $this->coverter->covertDoctrineToDomainEntity($entity);
        }
        return $entity;
    }


В серсисе который использует DomainEntity конвертирует ее обратно в
$entity = $this->coverter->covertDomainEntityToDoctrine($domainEntity);


И вот тут начинаются проблемы, потому что после первой конвертации covertDoctrineToDomainEntity
$entityManger->persist(this->coverter->covertDomainEntityToDoctrine($domainEntity);

unit of work теряет связь. Конвертируя doctrine entity в любой другой обьект, сериализуя ее и прочие аналогичные действия равносильны удалению ее из кеша, памяти UoW
$entityManger->clear(DoctrineEntity::class);
        $entityManger->detach($doctrineEntity);
        $entityManger->remove($doctrineEntity);

под капотом
$this->unitOfWork->remove($entity);

Это приводит к тому что Doctrine 2 считает сущность за новую, и делает вставку как новой сущности. Duplicate Entry Exception

Так вот, как намекнуть доктрине, unit of work, что мы имеем дело с уже существующим бьектом ?
  • Вопрос задан
  • 14 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
27 окт. 2021, в 14:18
18800 руб./за проект
27 окт. 2021, в 14:16
4000 руб./за проект
27 окт. 2021, в 14:04
50000 руб./за проект