The ODM provides transaction support if the underlying persistence layer supports them.


The Doctrine\ODM\PHPCR\DocumentManager#transactional() method provides support for, executing functions in a transactional-safe manner if the underlying PHPCR transport supports it. Any PHP callable type is supported.


use Doctrine\ODM\PHPCR\DocumentManager;

$documentManager = new DocumentManager($session);

$documentManager->transactional(function(DocumentManager $documentManager) {
    $document = new Article('Cool story!');
    $comment  = $article->comment('Amazing indeed!');


As you can see, there is also no need to call Doctrine\ODM\PHPCR\DocumentManager#flush(), since Doctrine\ODM\PHPCR\DocumentManager#transactional() will do it implicitly.

If an Exception is thrown during Doctrine\ODM\PHPCR\DocumentManager#transactional() execution, then the Doctrine\ODM\PHPCR\DocumentManager will be closed and the current transaction rolled back.


Multiple Doctrine\ODM\PHPCR\DocumentManager#transactional() calls are currently not supported, as nested transaction support is not supported either.


Doctrine\ODM\PHPCR\DocumentManager#transactional() will be executed in a non transactional-safe way if the underlying PHPCR transport does not support transactions.

Project Versions

Table Of Contents

This Page

Fork me on GitHub