首先让我说,我知道此问题已经出现,但没有一个解决方案似乎有效。而且,我也不是新成员,我记不起我的登录信息,所以我不得不重新注册....
基本上,我的工作是重新整理现有的Symfony2项目,该项目从未完成,并没有很好地组合在一起。但是,由于某些奇怪的原因,我在尝试在名为Customer的存储库中调用方法“count”时突然遇到上述错误。
以下是Repo中的方法(请记住,我的目录不称为Acme,为简单起见,此处仅替换它):
if (NSClassFromString(@"KIFTestCase") { … })
它是从主枝模板中调用的,如下所示:
public function count($type)
{
return $this->getEntityManager()
->createQuery('SELECT COUNT(c) FROM AcmePagesBundle:customer c WHERE c.status = :type')
->setParameter('type', $type)
->getSingleScalarResult();
}
运行应用程序时收到的错误是:
在渲染模板期间抛出了异常 (“未定义方法'count'。方法名称必须以其中任何一个开头 findBy或findOneBy!“)in 第30行的AcmePagesBundle :: main.html.twig。
我正在使用Symfony的最新版本,我相信它是2.7。我确定它之前有效,但在清除缓存并重新生成实体之后,它似乎已经搞砸了。我已经尝试过其他大多数建议,但现在却不知所措。
如果有人能对此有所了解,我会非常感激,谢谢。
迈克尔
修改
CustomerRepository.php文件:
{{ render(controller('AcmeCustomerBundle:Customer:count', {'type':'private'})) }}
Customer.php实体文件:
namespace Acme\PagesBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;
class CustomerRepository extends EntityRepository
{
public function countAll()
{
return $this->getEntityManager()
->createQuery('SELECT COUNT(c) FROM AcmePagesBundle:Customer c')
->getSingleScalarResult();
}
public function count($type)
{
return $this->getEntityManager()
->createQuery('SELECT COUNT(c) FROM AcmePagesBundle:Customer c WHERE c.status = :type')
->setParameter('type', $type)
->getSingleScalarResult();
}
public function reverseOrder()
{
return $this->getEntityManager()
->createQuery('SELECT c FROM AcmePagesBundle:Customer c ORDER BY c.id DESC')
->getResult();
}
public function lastTen()
{
return $this->getEntityManager()
->createQuery('SELECT c FROM AcmePagesBundle:Customer c ORDER BY c.id DESC')
->setMaxResults(10)
->getResult();
}
public function getCustomerByDefaultAddress($id)
{
return $this->getEntityManager()
->createQuery('SELECT c FROM AcmePagesBundle:Customer c WHERE c.defaultaddress = :id')
->setParameter('id', $id)
->getResult();
}
public function getCustomerByAddress($id)
{
return $this->getEntityManager()
->createQueryBuilder()
->select('c')
->from('AcmePagesBundle:Customer', 'c')
->innerJoin('c.address', 'a')
->where('a.id = :id OR c.defaultaddress = :id')
->setParameter('id', $id)
->getQuery()
->getResult();
}
}
答案 0 :(得分:0)
仔细检查您的实体定义:似乎Doctrine正在使用默认存储库而不是您的自定义存储库。
您必须在repositoryClass
注释中设置@ORM\Entity
选项:
/**
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\GroupRepository")
* [...]
*/
class Group
{
// [...]
}