Symfony2 - 方法名称必须以findBy或findOneBy开头

时间:2015-08-05 14:06:19

标签: php symfony repository entities

首先让我说,我知道此问题已经出现,但没有一个解决方案似乎有效。而且,我也不是新成员,我记不起我的登录信息,所以我不得不重新注册....

基本上,我的工作是重新整理现有的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();
    }

}

1 个答案:

答案 0 :(得分:0)

仔细检查您的实体定义:似乎Doctrine正在使用默认存储库而不是您的自定义存储库。

您必须在repositoryClass注释中设置@ORM\Entity选项:

/**
 * @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\GroupRepository")
 * [...]
 */
class Group
{
    // [...]
}