SimpleObjectHydrator.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace Gedmo\Translatable\Hydrator\ORM;
  3. use Gedmo\Translatable\Query\TreeWalker\TranslationWalker;
  4. use Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator as BaseSimpleObjectHydrator;
  5. /**
  6. * If query uses TranslationQueryWalker and is hydrating
  7. * objects - when it requires this custom object hydrator
  8. * in order to skip onLoad event from triggering retranslation
  9. * of the fields
  10. *
  11. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  12. * @package Gedmo.Translatable.Hydrator.ORM
  13. * @subpackage ObjectHydrator
  14. * @link http://www.gediminasm.org
  15. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  16. */
  17. class SimpleObjectHydrator extends BaseSimpleObjectHydrator
  18. {
  19. /**
  20. * {@inheritdoc}
  21. */
  22. protected function _hydrateAll()
  23. {
  24. $listener = $this->_hints[TranslationWalker::HINT_TRANSLATION_LISTENER];
  25. $listener->setSkipOnLoad(true);
  26. $result = parent::_hydrateAll();
  27. $listener->setSkipOnLoad(false);
  28. return $result;
  29. }
  30. /**
  31. * {@inheritdoc}
  32. */
  33. protected function _hydrateRow(array $data, array &$cache, array &$result)
  34. {
  35. if (isset($this->_hints[TranslationWalker::HINT_TRANSLATION_FALLBACKS])) {
  36. foreach ($this->_hints[TranslationWalker::HINT_TRANSLATION_FALLBACKS] as $field => $alias) {
  37. if ($data[$field] && !$data[$alias]) {
  38. $data[$alias] = $data[$field];
  39. }
  40. unset($data[$field]);
  41. }
  42. }
  43. return parent::_hydrateRow($data, $cache, $result);
  44. }
  45. }