doctrine / doctrine/phpcr-odm

Setting parent document to a Generic Node created on-the-fly in a prePersist listener causes PHPCRException

Open
#653 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
PHP
Stars
181
Forks
102
PR merge metrics
No merged PRs in 30d

Description

Hello,

I'm trying to "move" a new (yes a new) document (`Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\Route`) to another node by using `setParentDocument` in a `prePersist` event listener.

The target node is created on the fly if it's not there, using `NodeHelper::createPath` (I only need a generic target node).

``` php
public function prePersist(LifecycleEventArgs $args)
{
$route = $args->getObject();
$dm = $args->getObjectManager();

if ($route instanceof Route) {
$localeNodePath = $this->routeRoot . '/' . $this->locale;

if (!$localeNode = $dm->find(null, $localeNodePath)) {
$session = $dm->getPhpcrSession();
$localeNode = NodeHelper::createPath($session, $localeNodePath);

/* $session->save(); I believe this is not needed? */
}

$route->setParentDocument($localeNode);
}
}
```

The exception message is `Document is not managed and has no id ....`

Perhaps this is caused by the fact that the target node is created on the fly, but even calling `$session->save` doesn't help.

Any insight is greatly appreciated.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.