/** * @param array|\Traversable|string $rm * @param TypeMapperRegistry $typeMapperRegistry * @param array $choices * @param null|string $class * @param QueryBuilder|null $queryBuilder * @param null $labelPath * @param array $preferredChoices * @param null $groupPath * @param null $valuePath * @param PropertyAccessorInterface $propertyAccessor */ public function __construct($rm, $choices, $class, $queryBuilder, $labelPath = null, array $preferredChoices = array(), $groupPath = null, $valuePath = null, PropertyAccessorInterface $propertyAccessor = null) { $this->rm = $rm; $this->class = $class; if ($queryBuilder === null) { $this->queryBuilder = $this->rm->getRepository($class)->getQueryBuilder(); } else { if ($queryBuilder !== false) { $this->queryBuilder = $queryBuilder; } } parent::__construct($choices, $labelPath, $preferredChoices, $groupPath, $valuePath, $propertyAccessor); }
/** * Use mapping options to find a resource. * * @param $class * @param Request $request * @param $options * * @return bool */ protected function findOneBy($class, Request $request, $options) { if (!$options['mapping']) { $keys = $request->attributes->keys(); $options['mapping'] = $keys ? array_combine($keys, $keys) : array(); } foreach ($options['exclude'] as $exclude) { unset($options['mapping'][$exclude]); } if (!$options['mapping']) { return false; } $criteria = array(); foreach ($options['mapping'] as $attribute => $field) { $criteria[$attribute] = '"' . $request->attributes->get($field) . '"'; } if ($options['strip_null']) { $criteria = array_filter($criteria, function ($value) { return !is_null($value); }); } if (!$criteria) { return false; } if (isset($options['repository_method'])) { $method = $options['repository_method']; } else { $method = 'findOneBy'; } return $this->rm->getRepository($class)->{$method}($criteria); }
/** * Construct an ORM Query Builder Loader. * * @param QueryBuilder|\Closure $queryBuilder * @param Manager $manager * @param string $class * * @throws UnexpectedTypeException */ 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, 'Conjecto\\Nemrod\\QueryBuilder or \\Closure'); } if ($queryBuilder instanceof \Closure) { if (!$manager instanceof Manager) { throw new UnexpectedTypeException($manager, 'Conjecto\\Nemrod\\Manager'); } $queryBuilder = $queryBuilder($manager->getRepository($class)); if (!$queryBuilder instanceof QueryBuilder) { throw new UnexpectedTypeException($queryBuilder, 'Conjecto\\Nemrod\\QueryBuilder'); } } $this->queryBuilder = $queryBuilder; $this->class = $class; }
protected function getSize($key) { $qb = $this->resourceManager->getRepository($key)->getQueryBuilder(); $qb->reset()->select('(COUNT(DISTINCT ?instance) AS ?count)')->where('?instance a ' . $key); return $qb->getQuery()->execute(); }