ODM.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace Gedmo\Loggable\Mapping\Event\Adapter;
  3. use Gedmo\Mapping\Event\Adapter\ODM as BaseAdapterODM;
  4. use Gedmo\Loggable\Mapping\Event\LoggableAdapter;
  5. /**
  6. * Doctrine event adapter for ODM adapted
  7. * for Loggable behavior
  8. *
  9. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  10. * @package Gedmo\Loggable\Mapping\Event\Adapter
  11. * @subpackage ODM
  12. * @link http://www.gediminasm.org
  13. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  14. */
  15. final class ODM extends BaseAdapterODM implements LoggableAdapter
  16. {
  17. /**
  18. * {@inheritDoc}
  19. */
  20. public function getDefaultLogEntryClass()
  21. {
  22. return 'Gedmo\\Loggable\\Document\\LogEntry';
  23. }
  24. /**
  25. * {@inheritDoc}
  26. */
  27. public function getNewVersion($meta, $object)
  28. {
  29. $dm = $this->getObjectManager();
  30. $objectMeta = $dm->getClassMetadata(get_class($object));
  31. $identifierField = $this->getSingleIdentifierFieldName($objectMeta);
  32. $objectId = $objectMeta->getReflectionProperty($identifierField)->getValue($object);
  33. $qb = $dm->createQueryBuilder($meta->name);
  34. $qb->select('version');
  35. $qb->field('objectId')->equals($objectId);
  36. $qb->field('objectClass')->equals($objectMeta->name);
  37. $qb->sort('version', 'DESC');
  38. $qb->limit(1);
  39. $q = $qb->getQuery();
  40. $q->setHydrate(false);
  41. $result = $q->getSingleResult();
  42. if ($result) {
  43. $result = $result['version'] + 1;
  44. }
  45. return $result;
  46. }
  47. }