ODM.php 1.6 KB

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