Ir para conteúdo
Entre para seguir isso  
gust.php

Doctrine createQueryBuilder GroupBy

Recommended Posts

Bom dia senhores.

 

Estou tentando agrupar uma consulta por data no Doctrine se sucesso .... Alguém pode ajudar?

 


       $em = $this->getEntityManager();
      

        $qb = $em->createQueryBuilder();

        $qb->select('u');
        $qb->from('Servico\Model\Servico', 'u');
        
        $qb->where('u.STATUS IN (:status)');
        $qb->setParameter('status', ['2', '3', '4', '6']);

        if ($cliente) {
            $qb->andWhere('u.CLIENTE = :cliente');
            $qb->setParameter('cliente', $cliente);
        }

        if ($fornecedor) {
            $qb->andWhere('u.FORNECEDOR = :fornecedor');
            $qb->setParameter('fornecedor', $fornecedor);
        }

        if ($motorista) {
            $qb->andWhere('u.MOTORISTA = :motorista');
            $qb->setParameter('motorista', $motorista);
        }

        if ($fileCliente) {
            $qb->andWhere('u.FILE = :file_cliente');
            $qb->setParameter('file_cliente', $fileCliente);
        }

        if ($inicio AND $fim) {
            $qb->andWhere('u.DATA_INICIO BETWEEN :inicio AND :fim');
            $qb->setParameter('inicio', $inicio);
            $qb->setParameter('fim', $fim);
        }

        $qb->orderBy('u.DATA_INICIO', 'ASC');
        $qb->addOrderBy('u.HORA_INICIO', 'ASC');
        //$qb->groupBy('u.DATA_INICIO');                     ---> Isso não funciona

        $query = $qb->getQuery();

        return $query->getResult();

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 18/08/2018 at 19:42, washalbano disse:

Olá!
Se me puder me enviar um screenshot de um trecho de como esse objeto de arrays apareceu na tela, me add no Telegram: @washalbano, pra eu te orientar

 

Editado por gust.php
Isso não deveria estar aqui ... Isso foi de um outro post ja resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por edivancastro
      Pessoal, em anexo segue meu modelo de banco de dados (duas tabelas). Estou utilizando doctrine. Este é um modelo resumido para eu tentar explicar o que estou passando.
       
      As minhas classes Banner e Menu extendem de classes diferentes (ClasseX e ClasseY) e estas classes Banner e Menu, como voces podem ver possuem um Link que pode ser para uma categoria, artigo ou linkexterno (http://outrosite.com). Dai surgiu essa necessidade de min criar uma classe Link. Porem na minha opiniao é inviavel eu criar uma tabela no banco de dados para armazenar link, ou seja, a classe link não chega ser uma entidade concreta (tabela), seria apenas coluna no BD e para cada tipo de Link há uma estrategia para gerar o seu respectivo LinkURL, conforme pode ser observado na classe Link.
       
      Pensei em fazer class Menu extends Link   e  class Banner extends Link, porem as classes banner e menu ja extendem de outras classes e como o PHP não aceita herança multipla não tem como.
       
      enfim, como faço para mapear a classe Link para este modelo de banco de dados meu?
       
       
       
      <?php /** * @ORM\Entity */ class Banner extends ClasseX{ /** * @ORM\Id */ private $id; /** * @ORM\Column('type=string') */ private $descricao; private $link; protected setLink(Link $link){ $this->link = $link; } protected getLink(){ return $this->link; } }  
       
       
      <?php /** * @ORM\Entity */ class Menu extends ClasseY{ /** * @ORM\Id */ protected $id; /** * @ORM\Column(type="string") */ protected $descricao; protected $link; protected setLink(Link $link){ $this->link = $link; } protected getLink(){ return $this->link; } }  
      <?php class Link{ const TIPO_ARTIGO=1; const TIPO_CATEGORIA=2; const TIPO_LINKEXTERNO=3 protected $tipo_link; protected $categoria; protected $artigo; proctected $linkexterno; public function setLink($link){ if(is_object($link)){ switch(get_class($link)){ case Artigo::class: $this->tipo = self::TIPO_ARTIGO; $this->artigo = $link; break; case Categoria::class: $this->tipo = self::TIPO_CATEGORIA; $this->categoria = $link; break; } }else{ $this->tipo = self::TIPO_LINKEXTERNO; $this->linkexterno = $link; } } public function getLinkUrl(){ switch($this->tipo_link){ case self::TIPO_ARTIGO; return $this->makeUrlToArtigo(); break; case self::TIPO_CATEGORIA; return $this->makeUrlToCategoria(); break; case self::TIPO_LINKEXTERNO; return $this->linkexterno; } } }  

    • Por gust.php
      Prezados, bom dia
       
      Estou com um problema serio, precisando da ajuda de vcs.
       
      É o seguinte, tenho um tabela grande que esta relacionada com várias outras tabelas, essas tabelas viraram entidades no sistema e faço esse relacionamento com doctrine. No sistema, tenho uma tela com vários filtros, período de data, cliente, numero e motorista, esses são os filtros.
       
      Esse filtro funciona assim: Se o usuário fizer uma busca pelo período, é retornado só aquele período, se ele coloco o motorista vem o período com o motorista, o mesmo com o numero e cliente.
       
      Ta acontecendo o seguinte. Quando eu faço a primeira busca, o resultado é retornado em segundos, muito rápido, na segunda busca, muito rápido, na terceira muito rápido, depois o sistema começa a ficar tão lento que a tela chega a travar, eu tenho que mudar de tela para o sistema voltar a responder.
       
      Alguém já passou por isso?
       
      Já andei pesquisando e cheguei a conclusão que o doctrine retorna todos os relacionamentos envolvidos, é muita coisa,  por isso que deve estar travando, falta memória. Já tentei usar o parâmetro EXTRA_LAZY nos relacionamentos, mesmo assim não funcionou.
       
      Alguém sugere alguma coisa?
    • Por gust.php
      Olá galera...
       
      Acho que o meu problema é mais relacionado a OO que PHP.... Eu tenho a seguinte estrutura: Motorista, Veiculo e uma terceira tabela MOTORISTA_VEICULO que faz o relacionamento das 2 classes.
      Acredito que esta seja a maneira correta, pois nem todo motorista tem um carro relacionado. Meu problema esta aqui:
       
      Quando quero pegar uma informação do carro pelo motorista eu consigo:
       
      $motorista->getVeiculo()->getPlaca();    // OK, tenho a placa do carro
       
      Agora, se eu quiser pegar alguma informação do carro pelo motorista não funciona:
       
      $veiculo->getMotorista()->getNome();  // Fatal error: Call to undefined method Doctrine\ORM\PersistentCollection::getNome() in
       
      Minhas classe:
       
      MOTORISTA

      /**      * @ORM\ManyToMany(targetEntity="Veiculo", cascade={"merge"})      * @ORM\JoinTable(name="MOTORISTA_VEICULO",      *      joinColumns={@ORM\JoinColumn(name="MOTO_IDMOTORISTA", referencedColumnName="IDMOTORISTA")},      *      inverseJoinColumns={@ORM\JoinColumn(name="MOTO_IDVEICULO", referencedColumnName="IDCAR", unique=true)}      *  )      */     private $veiculo;             public function __construct()     {         parent::__construct();         $this->veiculo   = new \Doctrine\Common\Collections\ArrayCollection();     }     function getVeiculo()     {         return $this->veiculo;     }     function setVeiculo($veiculo)     {         $this->veiculo[] = $veiculo;     }
       
      VEICULO
       

      **      *      * @ORM\ManyToMany(targetEntity="Motorista", mappedBy="veiculo")      */     private $motorista;       function getMotorista() {         return $this->motorista;     }     function setMotorista($motorista)     {         $this->motorista = $motorista;     }     public function __construct()     {         $this->motorista = new \Doctrine\Common\Collections\ArrayCollection();     }
    • Por Bruno Henrique da Costa
      Galera, estou com uma duvida em doctrine, será que alguem poderia me ajudar.
      Eu tenho 3 campos sendo (data exclusao, data alteração e data inclusão), porém eu tenho q trabalhar de uma forma dinamica com eles para não ficar remontando o código, eu estou usando o metodo eventos do doctrine sendo eles, preRemove, prePersist e preUpdate, sendo que o preRemove eu vou atualizar o campo data exclusão prePersist o campo de cadastro e o preUpdate o campo de alteração.
      Porem os campos inicio e alteração da entidade está dando certo, so que quando eu vou para o preRemove não está, ele esta duplicando o registro e isso não é o que eu gostaria, alguem poderia me ajudar?
      Segue abaixo o meu código do evento.
       
      <?php namespace User\Event; use Zend\ServiceManager\ServiceManager; use Zend\Authentication\AuthenticationServiceInterface; use User\Entity; class Events { protected static $TEMPO_UPDATE; private $sm; public function __construct(ServiceManager $sm){ $this->sm = $sm; } private function getUsuario(){ $authService = $this->sm->get(AuthenticationServiceInterface::class); if($authService->hasIdentity()){ return $authService->getIdentity(); } } public function preRemove($eventArgs){ $entity = $eventArgs->getEntity(); $em = $eventArgs->getEntityManager(); if (method_exists($entity, 'setDtExc')) { self::$TEMPO_UPDATE = $entity->getDtAlt(); $entity->setDtAlt(-1); $entity->setDtExc(TEMPO); $em->persist($entity); $em->flush($entity); $em->detach($entity); } if (method_exists($entity, 'setUsuario') && !$entity instanceof Entity\Usuario && !$entity instanceof Entity\UsuarioPermissao && !$entity instanceof Entity\Grupo && !$entity instanceof Entity\GrupoPermissao) { $entity->setUsuario($this->getUsuario()); } } public function prePersist($eventArgs) { $entity = $eventArgs->getEntity(); if (method_exists($entity, 'setDtIni')) { $entity->setDtIni(TEMPO); } if (method_exists($entity, 'setUsuario') && !$entity instanceof Entity\Usuario && !$entity instanceof Entity\UsuarioPermissao && !$entity instanceof Entity\Grupo && !$entity instanceof Entity\GrupoPermissao) { $entity->setUsuario($this->getUsuario()); } } public function preUpdate($eventArgs) { $entity = $eventArgs->getEntity(); if (method_exists($entity, 'setDtAlt')) { switch($entity->getDtAlt()){ case -1: $entity->setDtAlt(self::$TEMPO_UPDATE); break; default: $entity->setDtAlt(TEMPO); } } if (method_exists($entity, 'setUsuario') && !$entity instanceof Entity\Usuario && !$entity instanceof Entity\UsuarioPermissao && !$entity instanceof Entity\Grupo && !$entity instanceof Entity\GrupoPermissao) { $entity->setUsuario($this->getUsuario()); } } } ?>  
    • Por gust.php
      Prezados, boa tarde!
       
      Estou tentando criar uma Helperview onde preciso fazer uma consulta ao DB, estou sando o Zend2 com Doctrine2 e tentando assim
       

      namespace Application\View\Helper; use Zend\View\Helper\AbstractHelper; use Doctrine\ORM\EntityManager; class HelperUserOn extends AbstractHelper {          /**      *      * @var \Doctrine\ORM\EntityManager      */     private $em;              public function __construct(EntityManager $em)     {         $this->em = $em; }
       
      O zend reclama da linha __construct ...
       
      Como posso fazer isso aqui sem o metodo getServiceLocator ?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.