示例#1
0
 /**
  * @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;
 }
示例#4
0
 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();
 }