MaterializedPath.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace Gedmo\Tree\Strategy\ORM;
  3. use Gedmo\Tree\Strategy\AbstractMaterializedPath;
  4. use Gedmo\Tool\Wrapper\AbstractWrapper;
  5. /**
  6. * This strategy makes tree using materialized path strategy
  7. *
  8. * @author Gustavo Falco <comfortablynumb84@gmail.com>
  9. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  10. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  11. */
  12. class MaterializedPath extends AbstractMaterializedPath
  13. {
  14. /**
  15. * {@inheritdoc}
  16. */
  17. public function removeNode($om, $meta, $config, $node)
  18. {
  19. $uow = $om->getUnitOfWork();
  20. $wrapped = AbstractWrapper::wrap($node, $om);
  21. $path = addcslashes($wrapped->getPropertyValue($config['path']), '%');
  22. // Remove node's children
  23. $qb = $om->createQueryBuilder();
  24. $qb->select('e')
  25. ->from($config['useObjectClass'], 'e')
  26. ->where($qb->expr()->like('e.'.$config['path'], $qb->expr()->literal($path.'%')));
  27. if (isset($config['level'])) {
  28. $lvlField = $config['level'];
  29. $lvl = $wrapped->getPropertyValue($lvlField);
  30. if (!empty($lvl)) {
  31. $qb->andWhere($qb->expr()->gt('e.' . $lvlField, $qb->expr()->literal($lvl)));
  32. }
  33. }
  34. $results = $qb->getQuery()
  35. ->execute();
  36. foreach ($results as $node) {
  37. $uow->scheduleForDelete($node);
  38. }
  39. }
  40. /**
  41. * {@inheritdoc}
  42. */
  43. public function getChildren($om, $meta, $config, $path)
  44. {
  45. $path = addcslashes($path, '%');
  46. $qb = $om->createQueryBuilder($config['useObjectClass']);
  47. $qb->select('e')
  48. ->from($config['useObjectClass'], 'e')
  49. ->where($qb->expr()->like('e.'.$config['path'], $qb->expr()->literal($path.'%')))
  50. ->andWhere('e.'.$config['path'].' != :path')
  51. ->orderBy('e.'.$config['path'], 'asc'); // This may save some calls to updateNode
  52. $qb->setParameter('path', $path);
  53. return $qb->getQuery()
  54. ->execute();
  55. }
  56. }