phpcr-odm icon indicating copy to clipboard operation
phpcr-odm copied to clipboard

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

Open kminh opened this issue 9 years ago • 3 comments

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).

    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.

kminh avatar Jul 24 '15 18:07 kminh

can you try and create a test case for this?

lsmith77 avatar Jul 26 '15 12:07 lsmith77

Hmm not sure where I should place the test? Here perhaps?

https://github.com/doctrine/phpcr-odm/tree/master/tests/Doctrine/Tests/ODM/PHPCR

I don't know anything about PHPCR ODM's internals so I'm not sure if I can create something useful.

kminh avatar Jul 26 '15 13:07 kminh

have a look at some of the event tests here for inspiration https://github.com/doctrine/phpcr-odm/tree/master/tests/Doctrine/Tests/ODM/PHPCR/Functional

lsmith77 avatar Jul 26 '15 14:07 lsmith77