1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
-
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
- namespace Symfony\Bridge\Doctrine\Form\ChoiceList;
-
- use Symfony\Component\Form\Exception\UnexpectedTypeException;
- use Doctrine\ORM\QueryBuilder;
- use Doctrine\DBAL\Connection;
-
- /**
- * Getting Entities through the ORM QueryBuilder
- */
- class ORMQueryBuilderLoader implements EntityLoaderInterface
- {
- /**
- * Contains the query builder that builds the query for fetching the
- * entities
- *
- * This property should only be accessed through queryBuilder.
- *
- * @var Doctrine\ORM\QueryBuilder
- */
- private $queryBuilder;
-
- /**
- * Construct an ORM Query Builder Loader
- *
- * @param QueryBuilder|\Closure $queryBuilder
- * @param EntityManager $manager
- * @param string $class
- */
- public function __construct($queryBuilder, $manager = null, $class = null)
- {
- // If a query builder was passed, it must be a closure or QueryBuilder
- // instance
- if (!($queryBuilder instanceof QueryBuilder || $queryBuilder instanceof \Closure)) {
- throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder or \Closure');
- }
-
- if ($queryBuilder instanceof \Closure) {
- $queryBuilder = $queryBuilder($manager->getRepository($class));
-
- if (!$queryBuilder instanceof QueryBuilder) {
- throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder');
- }
- }
-
- $this->queryBuilder = $queryBuilder;
- }
-
- /**
- * {@inheritDoc}
- */
- public function getEntities()
- {
- return $this->queryBuilder->getQuery()->execute();
- }
-
- /**
- * {@inheritDoc}
- */
- public function getEntitiesByIds($identifier, array $values)
- {
- $qb = clone ($this->queryBuilder);
- $alias = current($qb->getRootAliases());
- $parameter = 'ORMQueryBuilderLoader_getEntitiesByIds_'.$identifier;
- $where = $qb->expr()->in($alias.'.'.$identifier, ':'.$parameter);
-
- return $qb->andWhere($where)
- ->getQuery()
- ->setParameter($parameter, $values, Connection::PARAM_STR_ARRAY)
- ->getResult();
- }
- }
|