ODM.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace Gedmo\Sluggable\Mapping\Event\Adapter;
  3. use Gedmo\Mapping\Event\Adapter\ODM as BaseAdapterODM;
  4. use Doctrine\Common\Persistence\Mapping\ClassMetadata;
  5. use Doctrine\ODM\MongoDB\Cursor;
  6. use Gedmo\Sluggable\Mapping\Event\SluggableAdapter;
  7. /**
  8. * Doctrine event adapter for ODM adapted
  9. * for sluggable behavior
  10. *
  11. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  12. * @package Gedmo\Sluggable\Mapping\Event\Adapter
  13. * @subpackage ODM
  14. * @link http://www.gediminasm.org
  15. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  16. */
  17. final class ODM extends BaseAdapterODM implements SluggableAdapter
  18. {
  19. /**
  20. * {@inheritDoc}
  21. */
  22. public function getSimilarSlugs($object, ClassMetadata $meta, array $config, $slug)
  23. {
  24. $dm = $this->getObjectManager();
  25. $qb = $dm->createQueryBuilder($meta->name);
  26. $identifier = $this->extractIdentifier($dm, $object);
  27. if ($identifier) {
  28. $qb->field($meta->identifier)->notEqual($identifier);
  29. }
  30. $qb->where("function() {
  31. return this.{$config['slug']}.indexOf('{$slug}') === 0;
  32. }");
  33. $q = $qb->getQuery();
  34. $q->setHydrate(false);
  35. $result = $q->execute();
  36. if ($result instanceof Cursor) {
  37. $result = $result->toArray();
  38. }
  39. return $result;
  40. }
  41. }