MaterializedPath.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace Gedmo\Tree\Strategy\ODM\MongoDB;
  3. use Gedmo\Tree\Strategy\AbstractMaterializedPath;
  4. /**
  5. * This strategy makes tree using materialized path strategy
  6. *
  7. * @author Gustavo Falco <comfortablynumb84@gmail.com>
  8. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  9. * @package Gedmo.Tree.Strategy.ODM.MongoDB
  10. * @subpackage MaterializedPath
  11. * @link http://www.gediminasm.org
  12. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  13. */
  14. class MaterializedPath extends AbstractMaterializedPath
  15. {
  16. /**
  17. * Remove node and its children
  18. *
  19. * @param ObjectManager $om
  20. * @param object $meta - Metadata
  21. * @param object $config - config
  22. * @param object $node - node to remove
  23. * @return void
  24. */
  25. public function removeNode($om, $meta, $config, $node)
  26. {
  27. $pathProp = $meta->getReflectionProperty($config['path']);
  28. $pathProp->setAccessible(true);
  29. // Remove node and its children
  30. $om->createQueryBuilder()
  31. ->remove($meta->name)
  32. ->field($config['path'])->equals(new \MongoRegex('/^'.preg_quote($pathProp->getValue($node)).'.?+/'))
  33. ->getQuery()
  34. ->execute();
  35. }
  36. /**
  37. * Returns children of the node with its original path
  38. *
  39. * @param ObjectManager $om
  40. * @param object $meta - Metadata
  41. * @param object $config - config
  42. * @param mixed $originalPath - original path of object
  43. * @return void
  44. */
  45. public function getChildren($om, $meta, $config, $originalPath)
  46. {
  47. return $om->createQueryBuilder()
  48. ->find($meta->name)
  49. ->field($config['path'])->equals(new \MongoRegex('/^'.$originalPath.'.+/'))
  50. ->sort($config['path'], 'asc') // This may save some calls to updateNode
  51. ->getQuery()
  52. ->execute();
  53. }
  54. }