Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Uncaught ArgumentCountError: Too few arguments to function Doctrine\ORM\EntityRepository::createQueryBuilder()

Prezados,

Já vi e revi o código e não acho o erro. Poderiam me ajudar? Segue código.

Fatal error: Uncaught ArgumentCountError: Too few arguments to function Doctrine\ORM\EntityRepository::createQueryBuilder(), 0 passed in C:\sistemas\Estoque\Skeleton-Application\module\Estoque\src\Estoque\Entity\Repository\ProdutoRepository.php on line 12 and exactly 1 expected in C:\sistemas\Estoque\Skeleton-Application\vendor\doctrine\orm\lib\Doctrine\ORM\EntityRepository.php:81 Stack trace: #0 C:\sistemas\Estoque\Skeleton-Application\module\Estoque\src\Estoque\Entity\Repository\ProdutoRepository.php(12): Doctrine\ORM\EntityRepository->createQueryBuilder() #1 C:\sistemas\Estoque\Skeleton-Application\module\Estoque\src\Estoque\Controller\IndexController.php(24): Estoque\Entity\Repository\ProdutoRepository->getProdutosPaginados(1, 0) #2 C:\sistemas\Estoque\Skeleton-Application\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractActionController.php(82): Estoque\Controller\IndexController->IndexAction() #3 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEv in C:\sistemas\Estoque\Skeleton-Application\vendor\doctrine\orm\lib\Doctrine\ORM\EntityRepository.php on line 81


module.config.php

'produtos' => array ( 'type' => 'Segment', 'options' => array ( 'route' => '/Produtos[/:page]', 'constraints' => array ( 'page' => '[0-9]*', ), 'defaults' => array ( 'NAMESPACE' => 'Estoque\Controller', 'controller' => 'Index', 'action' => 'Index', 'page'=>1 ) ) ),


ProdutoRepository.php

<?php namespace Estoque\Entity\Repository;

use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Tools\Pagination\Paginator;

class ProdutoRepository extends EntityRepository{

public function getProdutosPaginados($qtdPorPagina,$offset){

  $em = $this->getEntityManager();
    $qb = $this->createQueryBuilder();    ======> esta é a linha 12

     $qb->select('p')
    ->from('Estoque\Entity\Produto', 'p')
    ->setMaxResults($qtdPorPagina)
    ->setFirstResult($offset)
    ->orderBy('p.id');

    $query = $qb->getQuery();

    $paginator = new Paginator($query);

    return $paginator;
}

}

Produto.php

<?php namespace Estoque\Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity(repositoryClass="\Estoque\Entity\Repository\ProdutoRepository") */

demais código omitido


IndexController.php

class IndexController extends AbstractActionController {

    public function IndexAction(){

        $pagina = 1;
        $qtdPorPagina = 1;
        $offset = ($pagina - 1) * $qtdPorPagina;

        $entityManager = $this->getServiceLocator()->get("Doctrine\ORM\EntityManager");
        $repositorio = $entityManager->getRepository('Estoque\Entity\Produto');

        $produtos = $repositorio->getProdutosPaginados($qtdPorPagina,$offset);

        $view_params = Array(

            'produtos' => $produtos
        );
        return new ViewModel($view_params);
    }

demais código omitido

2 respostas
solução!

Olá Henrique, Tudo bem?

Analisando o código acredito que tenha que ser feito uma mudança na linha 12 de:

$qb = $this->createQueryBuilder(); 

para

$qb = $em->createQueryBuilder(); 

Visto que createQueryBuilder() sem argumentos é um método do EntityManager e não do EntityRepository, embora o EntityRepository tenha um método chamado createQueryBuilder a assinatura dele requer argumentos como pode ser visto aqui

Espero ter ajudado.

Prezado Rafael,

Foi certeiro, funcionou.

Muito obrigado.