ODM.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. namespace Gedmo\Sluggable\Mapping\Event\Adapter;
  3. use Gedmo\Mapping\Event\Adapter\ODM as BaseAdapterODM;
  4. use Doctrine\ODM\MongoDB\Cursor;
  5. use Gedmo\Sluggable\Mapping\Event\SluggableAdapter;
  6. use Gedmo\Tool\Wrapper\AbstractWrapper;
  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, $meta, array $config, $slug)
  23. {
  24. $dm = $this->getObjectManager();
  25. $wrapped = AbstractWrapper::wrap($object, $dm);
  26. $qb = $dm->createQueryBuilder($config['useObjectClass']);
  27. if (($identifier = $wrapped->getIdentifier()) && !$meta->isIdentifier($config['slug'])) {
  28. $qb->field($meta->identifier)->notEqual($identifier);
  29. }
  30. $qb->field($config['slug'])->equals(new \MongoRegex('/^' . preg_quote($slug, '/') . '/'));
  31. $q = $qb->getQuery();
  32. $q->setHydrate(false);
  33. $result = $q->execute();
  34. if ($result instanceof Cursor) {
  35. $result = $result->toArray();
  36. }
  37. return $result;
  38. }
  39. }