ORM.php 1.4 KB

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