/**
  * @test
  */
 public function should_create_complex_query()
 {
     $specification = $this->userSpecificationFactory->status('approved')->orX($this->userSpecificationFactory->status('declined')->andX($this->userSpecificationFactory->name('John')));
     $this->queryBuilder->select('user')->from('User', 'user')->where($specification->expr())->setParameters($specification->parameters());
     $this->assertEquals(['status_1' => 'approved', 'status_2' => 'declined', 'name_3' => 'John'], $specification->parameters());
     $this->assertEquals('SELECT user FROM User user WHERE user.status = :status_1 OR (user.status = :status_2 AND user.name = :name_3)', $this->queryBuilder->getDQL());
 }
示例#2
0
 /**
  * @param ChannelConditionInterface $condition
  * @return ChannelInterface
  */
 public function searchOne(ChannelConditionInterface $condition)
 {
     $this->qb = $this->em->createQueryBuilder();
     $this->qb->select('ch')->from('CoreBundle:Channel', 'ch');
     $this->initQueryBuilder($condition);
     return $this->qb->getQuery()->getOneOrNullResult();
 }
 /**
  * Constructor.
  * 
  * @access   public
  * @param    ORM\QueryBuilder $query
  * @since    1.0.0-alpha
  * @version  1.0.0-alpha
  */
 public function __construct(ORM\QueryBuilder $query)
 {
     $this->query = $query;
     $this->oCountingQuery = clone $this->query;
     $this->oCountingQuery->select('COUNT(DISTINCT t.id)');
     $this->iCount = $this->getCountingQuery()->single();
 }
 /**
  * Constructor
  *
  * @param EntityManager $manager
  * @param string        $class
  */
 public function __construct(EntityManager $manager, $class)
 {
     $this->manager = $manager;
     $this->metadata = $manager->getClassMetadata($class);
     $this->qBuilder = $manager->createQueryBuilder();
     $this->qBuilder->select('e')->from($class, 'e');
 }
示例#5
0
 /**
  * @param CompanyConditionInterface $condition
  * @return Company[]
  */
 public function search(CompanyConditionInterface $condition)
 {
     $this->qb = $this->em->createQueryBuilder();
     $this->qb->select('co')->from('CoreBundle:Company', 'co');
     $this->initQueryBuilder($condition);
     $this->preparePagination($this->qb, $condition);
     return $this->qb->getQuery()->getResult();
 }
 /**
  * Return an article array by tag
  * @param $strings
  * @return array
  */
 public function searchArticlesByTags($strings)
 {
     $strings = $this->setCleanRequest($strings);
     $this->qb->select('t')->from('AppBundle:Tag', 't')->where('t.slug LIKE :strings')->addOrderBy('t.frequency', 'DESC')->setParameter('strings', $strings);
     $q = $this->qb->getQuery();
     $tags = $q->getResult();
     $articlesArray = array();
     foreach ($tags as $tag) {
         $articles = $tag->getArticles();
         foreach ($articles as $article) {
             array_push($articlesArray, $article);
         }
     }
     return $articlesArray;
 }
 public function buildCount(QueryBuilder $queryBuilder) : Query
 {
     if (!empty($this->name)) {
         $queryBuilder->where($queryBuilder->expr()->like('o.name.name', ':name'))->setParameter('name', '%' . $this->name . '%');
     }
     return $queryBuilder->select($queryBuilder->expr()->count('o.id'))->from(Organization::class, 'o')->leftJoin('o.organizationMembers', 'om')->leftJoin('o.owners', 'ow')->andWhere($queryBuilder->expr()->orX($queryBuilder->expr()->eq('om.userId', ':userId'), $queryBuilder->expr()->eq('ow.userId', ':userId')))->setParameter('userId', $this->userId->id())->getQuery();
 }
示例#8
0
    /**
     * @route: blog_home
     * Homepage controller
     */
    public function homeAction()
    {
        // entity manager
        $em = $this->getEm();
        
        $qb = new QueryBuilder($em);
        // dql query
        $qb->select('p,c,t')
            ->from('Bundle\BlogBundle\Entity\Post', 'p')
            ->join('p.category', 'c')
            ->join('p.tags', 't')
            ->orderBy('p.date', 'DESC');
        // array of objects
        $posts = $qb->getQuery()->getResult();

        $query = $em->createQuery('SELECT c,p FROM Bundle\BlogBundle\Entity\Category c JOIN c.posts p');
        $categories = $query->getResult();

        $query = $em->createQuery('SELECT t,p FROM Bundle\BlogBundle\Entity\Tag t JOIN t.posts p');
        $tags = $query->getResult();

        return $this->render('BlogBundle:Blog:homepage.html.twig', array(
            'posts' => $posts,
            'categories' => $categories,
            'tags' => $tags
        ));
    }
示例#9
0
 /**
  * Build the count of filtered query
  *
  * @return QueryBuilder
  */
 public function getFilteredCountQuery()
 {
     $this->buildFilteredQuery();
     $this->currentQueryBuilder->select('COUNT(DISTINCT ' . $this->getDistinct() . ')');
     $this->currentQueryBuilder->resetDQLPart('orderBy');
     return $this->currentQueryBuilder;
 }
示例#10
0
 /**
  * @extra:Route("/", name="_alf")
  * @extra:Template()
  */
 public function leftMenuAction()
 {
     //        $catalog = new Catalogs();
     //        $catalog->setCategory('1');
     //        $catalog->setName('skarpety wpisane');
     //        $em = $this->get('doctrine.orm.entity_manager');
     //        $em->persist($catalog);
     //        $em->flush();
     //        $menu = $this->get('doctrine.orm.entity_manager')
     //            ->createQuery('SELECT c FROM AlfShopBundle:Catalogs c ORDER BY c.id DESC')
     //            ->getResult()
     //            ;
     //        $menu = array( array('name' => 'A'), array('name' => 'B'),array('name' => 'C'));
     $em = $this->get('doctrine.orm.entity_manager');
     $qb = new QueryBuilder($em);
     $dql = $qb->select('c.name')->from('AlfShopBundle:Catalogs', 'c')->getQuery();
     $menu = $dql->getResult();
     $em = $this->get('doctrine.orm.entity_manager');
     $qb = new QueryBuilder($em);
     $dql = $qb->select('c')->from('AlfShopBundle:Catalogs', 'c');
     $query = $em->createQuery($dql);
     $adapter = $this->get('knplabs_paginator.adapter');
     $adapter->setQuery($query);
     $adapter->setDistinct(true);
     $paginator = new \Zend\Paginator\Paginator($adapter);
     $paginator->setCurrentPageNumber($this->get('request')->query->get('page', 1));
     $paginator->setItemCountPerPage(2);
     $paginator->setPageRange(5);
     //        $menu = $m ->getResult();
     //        $menu = $em->find('AlfShopBundle:Catalogs');
     //        $em->persist($menu);
     //        $em->flush();
     //        $menu = array('A', 'B');
     return $this->render('AlfShopBundle:Shop:leftMenu.html.twig', array('menuList' => $paginator, 'paginator' => $paginator));
 }
示例#11
0
 /**
  * Builds the query for the given data request object
  * 
  * @access public
  * @param \Zepi\DataSource\Core\Entity\DataRequest $dataRequest
  * @param \Doctrine\ORM\QueryBuilder $queryBuilder
  * @param string $entity
  * @param string $tableCode
  */
 public function buildDataRequestQuery(DataRequest $dataRequest, QueryBuilder $queryBuilder, $entity, $tableCode)
 {
     $queryBuilder->select($tableCode)->from($entity, $tableCode);
     $hasWhere = false;
     $i = 1;
     foreach ($dataRequest->getFilters() as $filter) {
         $whereQuery = $tableCode . '.' . $filter->getFieldName() . ' ' . $filter->getMode() . ' :' . $i;
         if ($hasWhere) {
             $queryBuilder->andWhere($whereQuery);
         } else {
             $queryBuilder->where($whereQuery);
             $hasWhere = true;
         }
         $queryBuilder->setParameter($i, $filter->getNeededValue());
         $i++;
     }
     // Sorting
     if ($dataRequest->hasSorting()) {
         $mode = 'ASC';
         if (in_array($dataRequest->getSortByDirection(), array('ASC', 'DESC'))) {
             $mode = $dataRequest->getSortByDirection();
         }
         $queryBuilder->orderBy($tableCode . '.' . $dataRequest->getSortBy(), $mode);
     }
     // Offset
     if ($dataRequest->hasRange()) {
         $queryBuilder->setFirstResult($dataRequest->getOffset());
         $queryBuilder->setMaxResults($dataRequest->getNumberOfEntries());
     }
 }
 public function implement(DoctrineQueryBuilder $queryBuilder)
 {
     if (!$this->getValue()) {
         return $queryBuilder;
     }
     $queryBuilder->select('COUNT(' . QueryBuilder::DEFAULT_ALIAS . '.id)');
 }
示例#13
0
 public function getQueryBuilder()
 {
     if (!$this->queryBuilder) {
         $this->queryBuilder = $this->em->createQueryBuilder();
         $this->queryBuilder->select('root')->from($this->getClassMetadata()->getName(), 'root');
     }
     return $this->queryBuilder;
 }
示例#14
0
 /**
  * Helper function which sets the fromPath and the selectPath for the order list query.
  * @param \Doctrine\ORM\QueryBuilder $builder
  * @return \Doctrine\ORM\QueryBuilder
  */
 protected function selectListQuery(\Doctrine\ORM\QueryBuilder $builder)
 {
     //select the different entities
     $builder->select(array('documents.id as id', 'documents.date as date', 'documents.typeId as typeId', 'documents.customerId as customerId', 'documents.orderId as orderId', 'documents.amount as amount', 'documents.documentId as documentId', 'documents.hash as hash', 'type.name as typeName'));
     //join the required tables for the order list
     $builder->from('Shopware\\Models\\Order\\Document\\Document', 'documents')->join('documents.type', 'type');
     return $builder;
 }
示例#15
0
 /**
  * @dataProvider addDatePartsSelectProvider
  */
 public function testAddDatePartsSelect($start, $end, $expects)
 {
     $start = new \DateTime($start, new \DateTimeZone('UTC'));
     $end = new \DateTime($end, new \DateTimeZone('UTC'));
     $queryBuilder = new QueryBuilder($this->getTestEntityManager());
     $queryBuilder->select('id')->from('Oro\\Bundle\\DashboardBundle\\Tests\\Unit\\Fixtures\\FirstTestBundle\\Entity\\TestEntity', 't');
     $this->helper->addDatePartsSelect($start, $end, $queryBuilder, 't.createdAt');
     $this->assertEquals($expects, $queryBuilder->getDQL());
 }
示例#16
0
 /**
  * Create query based on current settings
  *
  * @param null $offset
  * @param null $itemCountPerPage
  *
  * @return QueryBuilder
  */
 public function createQuery($offset = null, $itemCountPerPage = null)
 {
     $service = $this->getService();
     $alias = $service->getAlias();
     $entity = $service->getEntityClass();
     //gets custom query if set
     if (!($this->_qb = $this->getGrid()->getCustomQueryBuilder())) {
         $this->_qb = $this->getService()->getEntityManager()->createQueryBuilder();
     }
     $this->_qb->select($alias);
     $this->_qb->from($entity, $alias);
     if ($itemCountPerPage) {
         $this->_qb->setMaxResults($itemCountPerPage);
     }
     if ($offset) {
         $this->_qb->setFirstResult($offset);
     }
     $filter = $this->getFilter();
     if (is_array($filter) && array_key_exists('field', $filter) && array_key_exists('value', $filter) && array_key_exists('expression', $filter) && array_key_exists('options', $filter)) {
         $this->filter($filter['field'], $filter['value'], $filter['expression'], $filter['options']);
     }
     if ($treeFilter = $this->getTreeFilter()) {
         $this->buildTreeFilterQuery($treeFilter);
     }
     $sort = $this->getSort();
     if (is_array($sort)) {
         $c = 0;
         foreach ($sort as $s) {
             if (isset($s['sidx'])) {
                 $field = $s['sidx'];
                 $direction = isset($s['sord']) ? $s['sord'] : 'asc';
                 if ($c) {
                     $this->_qb->addOrderBy($this->getService()->getAlias() . '.' . $field, $direction);
                 } else {
                     $this->_qb->orderBy($this->getService()->getAlias() . '.' . $field, $direction);
                 }
                 $c++;
             }
         }
     }
     return $this->_qb;
 }
示例#17
0
 /**
  * Testing plugin
  *
  * @return void
  */
 public function testInvoke()
 {
     $options = new Options(['criteria' => ['name' => 'test', 'isActive' => true], 'fieldMapping' => ['name' => 'e.name', 'isActive' => 'e.isActive'], 'valueTypeMapping' => ['name' => Criteria::LIKE_LEFT]]);
     $plugin = new Criteria($options);
     $entityManager = $this->getMockBuilder(EntityManager::class)->disableOriginalConstructor()->getMock();
     $queryBuilder = new QueryBuilder($entityManager);
     $queryBuilder->select('e');
     $queryBuilder->from('testTable', 'e');
     $plugin($queryBuilder);
     $this->assertEquals('SELECT e FROM testTable e WHERE e.name LIKE ?1 AND e.isActive = ?2', $queryBuilder->getDQL());
 }
示例#18
0
 /**
  * Testing plugin
  *
  * @return void
  */
 public function testInvoke()
 {
     $options = new Options(['select' => 'a, b, c', 'joins' => ['b' => 'a.test', 'c' => 'b.test2']]);
     $plugin = new \Webowy\Doctrine\Query\DataTable\Plugin\Select($options);
     $entityManager = $this->getMockBuilder(EntityManager::class)->disableOriginalConstructor()->getMock();
     $queryBuilder = new QueryBuilder($entityManager);
     $queryBuilder->select('e');
     $queryBuilder->from('testTable', 'e');
     $plugin($queryBuilder);
     $this->assertEquals('SELECT a, b, c FROM testTable e LEFT JOIN a.test b LEFT JOIN b.test2 c', $queryBuilder->getDQL());
 }
示例#19
0
 /**
  * @param ClientConditionInterface $condition
  * @return array
  */
 public function resultCount(ClientConditionInterface $condition)
 {
     $this->qb = $this->em->createQueryBuilder();
     $this->qb->select('COUNT(c)')->from('CoreBundle:Client', 'c');
     $this->initQueryBuilder($condition);
     try {
         $count = (int) $this->qb->getQuery()->getSingleScalarResult();
     } catch (NoResultException $e) {
         $count = 0;
     }
     return $count;
 }
示例#20
0
 protected function getFilteredPostsIds(array $identifiers, $mask, array $orX = [])
 {
     $qb = new QueryBuilder($this->entityManager);
     $query = $qb->select('p')->from('Tests\\AlexDpy\\Acl\\Post', 'p')->getQuery();
     $aclFilter = new DoctrineOrmAclFilter($query);
     $aclFilter->setAclSchema($this->aclSchema);
     $aclFilter->apply('p', 'id', 'post-', $identifiers, $mask, $orX);
     $result = array_map(function (Post $post) {
         return (int) $post->getId();
     }, $query->getResult());
     return [$result];
 }
示例#21
0
 /**
  * Get ids of entities from the QueryBuilder
  *
  * @return array
  */
 protected function getEntitiesIds()
 {
     if (null === $this->entitiesIds) {
         $rootAlias = current($this->queryBuilder->getRootAliases());
         $rootIdExpr = sprintf('%s.id', $rootAlias);
         $from = current($this->queryBuilder->getDQLPart('from'));
         $this->queryBuilder->select($rootIdExpr)->resetDQLPart('from')->from($from->getFrom(), $from->getAlias(), $rootIdExpr)->groupBy($rootIdExpr);
         $results = $this->queryBuilder->getQuery()->getArrayResult();
         $this->entitiesIds = array_keys($results);
     }
     return $this->entitiesIds;
 }
示例#22
0
 /**
  * Create query object
  *
  * @return \Doctrine\ORM\QueryBuilder
  */
 public function createQuery()
 {
     $offset = ($this->_options->getPage() - 1) * $this->_options->getRows();
     if (!($this->_qb = $this->_options->getCustomQueryBuilder())) {
         $this->_qb = $this->getEntityManager()->createQueryBuilder();
     }
     $this->_qb->select($this->getAlias());
     $this->_qb->from($this->getEntityClass(), $this->getAlias());
     if ($joins = $this->getOptions()->getJoins()) {
         foreach ($joins as $index => $join) {
             $placeHolder = ':p' . $join['field'] . $index;
             $this->_qb->innerJoin($this->getAlias() . '.' . $join['field'], $join['alias'])->andWhere($join['alias'] . '.id = ' . $placeHolder)->setParameter($placeHolder, $join['key']);
         }
     }
     if ($itemCountPerPage = $this->_options->getRows()) {
         $this->_qb->setMaxResults($itemCountPerPage);
     }
     if ($offset) {
         $this->_qb->setFirstResult($offset);
     }
     if ($presets = $this->_options->getPresets()) {
         $this->addPresets($presets);
     }
     $filter = $this->_options->getFilters();
     if (is_array($filter) && array_key_exists('field', $filter) && array_key_exists('value', $filter) && array_key_exists('expression', $filter) && array_key_exists('options', $filter)) {
         $this->filter($filter['field'], $filter['value'], $filter['expression'], $filter['options']);
     }
     if ($treeFilter = $this->_options->getTreeFilter()) {
         $this->buildTreeFilterQuery($treeFilter);
     }
     $sort = $this->_options->getSortOrder();
     if (is_array($sort)) {
         $c = 0;
         foreach ($sort as $s) {
             if (!empty($s['sidx'])) {
                 $field = $s['sidx'];
                 $direction = isset($s['sord']) ? $s['sord'] : 'asc';
                 if ($c) {
                     $this->_qb->addOrderBy($this->getAlias() . '.' . $field, $direction);
                 } else {
                     $this->_qb->orderBy($this->getAlias() . '.' . $field, $direction);
                 }
                 $c++;
             }
         }
     }
     if ($subGridFilter = $this->_options->getSubGridFilter()) {
         foreach ($subGridFilter as $field => $value) {
             $this->_qb->andWhere($this->_qb->expr()->eq($this->getAlias() . '.' . $field, $value));
         }
     }
     return $this->_qb;
 }
示例#23
0
 /**
  * @param QueryBuilder $queryBuilder
  * @return void
  */
 public function __invoke(QueryBuilder $queryBuilder)
 {
     $options = $this->getOptions();
     if ($options->getSelect()) {
         $queryBuilder->select($options->getSelect());
     }
     if ($options->getJoins() && is_array($options->getJoins())) {
         foreach ($options->getJoins() as $alias => $join) {
             $queryBuilder->leftJoin($join, $alias);
         }
     }
 }
示例#24
0
 public function testJoinACLWithoutEntityAliasAndClass()
 {
     $em = $this->getMock('Doctrine\\ORM\\EntityManager', [], [], '', false);
     $identity = $this->getMockForAbstractClass('MyCLabs\\ACL\\Model\\SecurityIdentityInterface');
     $qb = new QueryBuilder($em);
     $qb->select('test')->from('test', 'test');
     ACLQueryHelper::joinACL($qb, $identity, Actions::VIEW);
     $dql = 'SELECT test FROM test test INNER JOIN MyCLabs\\ACL\\Model\\Authorization authorization ' . 'WITH test.id = authorization.entityId ' . 'WHERE authorization.entityClass = :acl_entity_class ' . 'AND authorization.securityIdentity = :acl_identity ' . 'AND authorization.actions.view = true';
     $this->assertEquals($dql, $qb->getDQL());
     $this->assertSame('test', $qb->getParameter('acl_entity_class')->getValue());
     $this->assertSame($identity, $qb->getParameter('acl_identity')->getValue());
 }
 public function implement(DoctrineQueryBuilder $queryBuilder)
 {
     if ($this->payload->get('count')->getValue() === true) {
         return $queryBuilder;
     }
     foreach ($this->getValue() as $i => $field) {
         if ($i === 0) {
             $queryBuilder->select($field);
         } else {
             $queryBuilder->addSelect($field);
         }
     }
 }
 /**
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function testVisitDatasource()
 {
     $qb = new QueryBuilder($this->getTestEntityManager());
     $qb->select(['user.id', 'user.name as user_name', 'user.status as user_status'])->from('Oro\\Bundle\\QueryDesignerBundle\\Tests\\Unit\\Fixtures\\Models\\CMS\\CmsUser', 'user')->join('user.address', 'address');
     $manager = $this->getMockBuilder('Oro\\Bundle\\QueryDesignerBundle\\QueryDesigner\\Manager')->disableOriginalConstructor()->getMock();
     $manager->expects($this->any())->method('createFilter')->will($this->returnCallback(function ($name, $params) {
         return $this->createFilter($name, $params);
     }));
     $extension = new OrmDatasourceExtension(new RestrictionBuilder($manager));
     $datasource = $this->getMockBuilder('Oro\\Bundle\\DataGridBundle\\Datasource\\Orm\\OrmDatasource')->disableOriginalConstructor()->getMock();
     $datasource->expects($this->once())->method('getQueryBuilder')->will($this->returnValue($qb));
     $config = DatagridConfiguration::create(['source' => ['query_config' => ['filters' => [['column' => 'user_name', 'filter' => 'string', 'filterData' => ['type' => '2', 'value' => 'test_user_name'], 'columnAlias' => 'user_name'], 'AND', [['column' => 'user_status', 'filter' => 'datetime', 'filterData' => ['type' => '2', 'value' => ['start' => '2013-11-20 10:30', 'end' => '2013-11-25 11:30']]], 'AND', [[['column' => 'address.country', 'filter' => 'string', 'filterData' => ['type' => '1', 'value' => 'test_address_country'], 'columnAlias' => 'address_country'], 'OR', ['column' => 'address.city', 'filter' => 'string', 'filterData' => ['type' => '1', 'value' => 'test_address_city']]], 'OR', ['column' => 'address.zip', 'filter' => 'string', 'filterData' => ['type' => '1', 'value' => 'address_zip']]]]]]]]);
     $extension->visitDatasource($config, $datasource);
     $result = $qb->getDQL();
     $counter = 0;
     $result = preg_replace_callback('/(:[a-z]+)(\\d+)/', function ($matches) use(&$counter) {
         return $matches[1] . ++$counter;
     }, $result);
     $this->assertEquals('SELECT user.id, user.name as user_name, user.status as user_status ' . 'FROM Oro\\Bundle\\QueryDesignerBundle\\Tests\\Unit\\Fixtures\\Models\\CMS\\CmsUser user ' . 'INNER JOIN user.address address ' . 'WHERE user_name NOT LIKE :string1 AND (' . '(user_status < :datetime2 OR user_status > :datetime3) AND ' . '(address.country LIKE :string4 OR address.city LIKE :string5 OR address.zip LIKE :string6)' . ')', $result);
 }
 /**
  * @dataProvider visitDatasourceProvider
  */
 public function testVisitDatasource($source, $expected)
 {
     $qb = new QueryBuilder($this->getTestEntityManager());
     $qb->select(['user.id', 'user.name as user_name', 'user.status as user_status'])->from('Oro\\Bundle\\QueryDesignerBundle\\Tests\\Unit\\Fixtures\\Models\\CMS\\CmsUser', 'user')->join('user.address', 'address');
     $manager = $this->getMockBuilder('Oro\\Bundle\\QueryDesignerBundle\\QueryDesigner\\Manager')->disableOriginalConstructor()->getMock();
     $manager->expects($this->any())->method('createFilter')->will($this->returnCallback(function ($name, $params) {
         return $this->createFilter($name, $params);
     }));
     $extension = new OrmDatasourceExtension(new RestrictionBuilder($manager));
     $datasource = $this->getMockBuilder('Oro\\Bundle\\DataGridBundle\\Datasource\\Orm\\OrmDatasource')->disableOriginalConstructor()->getMock();
     $datasource->expects($this->once())->method('getQueryBuilder')->will($this->returnValue($qb));
     $config = DatagridConfiguration::create($source);
     $extension->visitDatasource($config, $datasource);
     $result = $qb->getDQL();
     $counter = 0;
     $result = preg_replace_callback('/(:[a-z]+)(\\d+)/', function ($matches) use(&$counter) {
         return $matches[1] . ++$counter;
     }, $result);
     $this->assertEquals($expected, $result);
 }
示例#28
0
 /**
  * @param QueryBuilder $qb
  * @param Search $search
  * @return QueryBuilder
  */
 public function map(QueryBuilder $qb, Search $search)
 {
     $qb->select('c, s')->from('EtuModuleCovoitBundle:Covoit', 'c')->leftJoin('c.subscriptions', 's');
     if (!$search->olds) {
         $qb->andWhere('c.date > CURRENT_DATE()');
     }
     if ($search->startCity) {
         $qb->andWhere('c.startCity = :startCity')->setParameter('startCity', $search->startCity->getId());
     }
     if ($search->endCity) {
         $qb->andWhere('c.endCity = :endCity')->setParameter('endCity', $search->endCity->getId());
     }
     if ($search->date) {
         if ($search->dateBeforeAfter) {
             $before = clone $search->date;
             $before->add(\DateInterval::createFromDateString('-1 day'));
             $after = clone $search->date;
             $after->add(\DateInterval::createFromDateString('1 day'));
             $qb->andWhere('c.date BETWEEN :before AND :after')->setParameter('before', $before->format('Y-m-d') . ' 00:00:00')->setParameter('after', $after->format('Y-m-d') . ' 00:00:00');
         } else {
             $qb->andWhere('c.date = :date')->setParameter('date', $search->date->format('Y-m-d') . ' 00:00:00');
         }
     }
     if ($search->priceMax) {
         $qb->andWhere('c.price <= :priceMax')->setParameter('priceMax', $search->priceMax);
     }
     if ($search->hourMin) {
         $qb->andWhere('c.startHour >= :hourMin')->setParameter('hourMin', $search->hourMin->format('H:i:s'));
     }
     if ($search->hourMax) {
         $qb->andWhere('c.startHour <= :hourMax')->setParameter('hourMax', $search->hourMax->format('H:i:s'));
     }
     if ($search->keywords) {
         $qb->andWhere('c.notes LIKE :keywords')->setParameter('keywords', '%' . implode('%', explode(' ', $search->keywords)) . '%');
     }
     if ($search->placesLeft) {
         $qb->having('(c.capacity - COUNT(s)) >= :placesLeft')->setParameter('placesLeft', $search->placesLeft);
     }
     return $qb;
 }
示例#29
0
 public function gridFields(QueryBuilder $qb, $params)
 {
     $select = array();
     $select[] = 'o.id as DT_RowId';
     foreach ($params['columns'] as $columns) {
         if ($columns['name'] && substr($columns['name'], 0, 1) != '_') {
             $field = $this->_getFieldName($columns['name']);
             $fieldAlias = str_replace(".", "_", $columns['name']);
             $select[] = $field . ' as ' . $fieldAlias;
         }
     }
     $qb->select(implode(", ", $select));
     foreach ($params['order'] as $order) {
         if (substr($params['columns'][$order['column']]['name'], 0, 1) != '_') {
             $field = $this->_getFieldName($params['columns'][$order['column']]['name']);
             $orderColName = $field;
             $qb->addOrderBy($orderColName, $order['dir']);
         }
     }
     $qb->setFirstResult($params['start'])->setMaxResults($params['length']);
     return $qb->getQuery()->getArrayResult();
 }
示例#30
0
 public function buildSelectQuery(QueryBuilder $queryBuilder, $parameters, $class, $sort = array(), $join = "", $joinParams = array())
 {
     if (!empty($joinParams)) {
         foreach ($joinParams as $key => $joinParam) {
             unset($parameters[$key]);
         }
     }
     if (!empty($sort)) {
         unset($parameters[$sort['key']]);
     }
     $from = "DraftBundle:" . $class;
     $queryBuilder->select("c")->from($from, "c");
     if (isset($parameters['limit'])) {
         $limit = $parameters['limit'];
         $queryBuilder->setMaxResults($limit);
         if (isset($parameters['page'])) {
             $page = ($parameters['page'] - 1) * $limit;
             $queryBuilder->setFirstResult($page);
             unset($parameters['page']);
         }
         unset($parameters['limit']);
     }
     $i = 0;
     foreach ($parameters as $key => $value) {
         if ($value === "") {
             continue;
         }
         if ($i == 0) {
             $queryBuilder->where("c.{$key} = :param{$i}")->setParameter(":param{$i}", "{$value}");
         } else {
             $queryBuilder->andWhere("c.{$key} = :param{$i}")->setParameter(":param{$i}", "{$value}");
         }
         $i++;
     }
     if (!empty($sort)) {
         $queryBuilder->orderBy("c." . $sort['key'], $sort['value']);
     }
     return $queryBuilder;
 }