ORM.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace Gedmo\Sluggable\Mapping\Event\Adapter;
  3. use Gedmo\Mapping\Event\Adapter\ORM as BaseAdapterORM;
  4. use Doctrine\ORM\EntityManager;
  5. use Doctrine\ORM\Mapping\ClassMetadataInfo;
  6. use Doctrine\ORM\Query;
  7. /**
  8. * Doctrine event adapter for ORM adapted
  9. * for sluggable behavior
  10. *
  11. * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
  12. * @package Gedmo\Sluggable\Mapping\Event\Adapter
  13. * @subpackage ORM
  14. * @link http://www.gediminasm.org
  15. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  16. */
  17. final class ORM extends BaseAdapterORM
  18. {
  19. /**
  20. * Loads the similar slugs
  21. *
  22. * @param EntityManager $em
  23. * @param object $object
  24. * @param ClassMetadataInfo $meta
  25. * @param array $config
  26. * @param string $slug
  27. * @return array
  28. */
  29. public function getSimilarSlugs(EntityManager $em, $object, ClassMetadataInfo $meta, array $config, $slug)
  30. {
  31. $qb = $em->createQueryBuilder();
  32. $qb->select('rec.' . $config['slug'])
  33. ->from($meta->name, 'rec')
  34. ->where($qb->expr()->like(
  35. 'rec.' . $config['slug'],
  36. $qb->expr()->literal($slug . '%'))
  37. );
  38. // include identifiers
  39. $entityIdentifiers = $this->extractIdentifier($em, $object, false);
  40. $parameters = array();
  41. foreach ($entityIdentifiers as $field => $value) {
  42. if (strlen($value)) {
  43. $qb->andWhere('rec.' . $field . ' <> :' . $field);
  44. $parameters[$field] = $value;
  45. }
  46. }
  47. $q = $qb->getQuery();
  48. if ($parameters) {
  49. $q->setParameters($parameters);
  50. }
  51. $q->setHydrationMode(Query::HYDRATE_ARRAY);
  52. return $q->execute();
  53. }
  54. }