ORM.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace Gedmo\Loggable\Mapping\Event\Adapter;
  3. use Gedmo\Mapping\Event\Adapter\ORM as BaseAdapterORM;
  4. use Doctrine\Common\Persistence\Mapping\ClassMetadata;
  5. use Gedmo\Loggable\Mapping\Event\LoggableAdapter;
  6. /**
  7. * Doctrine event adapter for ORM adapted
  8. * for Loggable behavior
  9. *
  10. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  11. * @package Gedmo\Loggable\Mapping\Event\Adapter
  12. * @subpackage ORM
  13. * @link http://www.gediminasm.org
  14. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  15. */
  16. final class ORM extends BaseAdapterORM implements LoggableAdapter
  17. {
  18. /**
  19. * {@inheritDoc}
  20. */
  21. public function getDefaultLogEntryClass()
  22. {
  23. return 'Gedmo\\Loggable\\Entity\\LogEntry';
  24. }
  25. /**
  26. * {@inheritDoc}
  27. */
  28. public function getNewVersion(ClassMetadata $meta, $object)
  29. {
  30. $em = $this->getObjectManager();
  31. $objectMeta = $em->getClassMetadata(get_class($object));
  32. $identifierField = $this->getSingleIdentifierFieldName($objectMeta);
  33. $objectId = $objectMeta->getReflectionProperty($identifierField)->getValue($object);
  34. $dql = "SELECT MAX(log.version) FROM {$meta->name} log";
  35. $dql .= " WHERE log.objectId = :objectId";
  36. $dql .= " AND log.objectClass = :objectClass";
  37. $q = $em->createQuery($dql);
  38. $q->setParameters(array(
  39. 'objectId' => $objectId,
  40. 'objectClass' => $objectMeta->name
  41. ));
  42. return $q->getSingleScalarResult() + 1;
  43. }
  44. }