Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The method name must start with either findBy or findOneBy. Undefined method Symfony?

Tags:

symfony

I am working through part4 of Symfony2, and while updating the controller and helper class code i got the following error message

Undefined method 'getLatestBlogs'. The method name must start with either findBy or findOneBy! 

before i had put some code in controller that i shifted to my helper class as taught by tutorial, which result in the above error message.

<?php // src/Blogger/BlogBundle/Repository/BlogRepository.php namespace Blogger\BlogBundle\Repository; use Doctrine\ORM\EntityRepository;  /**  * BlogRepository  * This class was generated by the Doctrine ORM. Add your own custom  * repository methods below. */ class BlogRepository extends EntityRepository {  public function getLatestBlogs($limit = null)  {     $qb = $this->createQueryBuilder('b')                ->select('b')                ->addOrderBy('b.created', 'DESC');      if (false === is_null($limit))         $qb->setMaxResults($limit);      return $qb->getQuery()               ->getResult();   }  } 

And here is my controller file index Action Code:-

// src/Blogger/BlogBundle/Controller/PageController.php class PageController extends Controller {   public function indexAction()   {     $em = $this->getDoctrine()                ->getEntityManager();      $blogs = $em->getRepository('BloggerBlogBundle:Blog')                 ->getLatestBlogs();      return $this->render('BloggerBlogBundle:Page:index.html.twig', array(         'blogs' => $blogs     ));     }      // .. } 

I am attaching few lines from /Entity/Blog.php file. please see if they are correct as per your answer.

<?php // src/Blogger/BlogBundle/Entity/Blog.php  namespace Blogger\BlogBundle\Entity; use Doctrine\ORM\Mapping as ORM;  /**  * @ORM\Entity(repositoryClass="Blogger\BlogBundle\Repository\BlogRepository")  * @ORM\Table(name="blog")  * @ORM\HasLifecycleCallbacks()  * @ORM\Entity  */  class Blog  {   /**    * @ORM\Id    * @ORM\Column(type="integer")    * @ORM\GeneratedValue(strategy="AUTO")    * @ORM\HasLifecycleCallbacks()   */   protected $id;   --   --  } 

Where Am I doing wrong ?

like image 211
ScoRpion Avatar asked Feb 07 '12 07:02

ScoRpion


2 Answers

Make sure that you have modified your entity class:

// src/Blogger/BlogBundle/Entity/Blog.php /**  * @ORM\Entity(repositoryClass="Blogger\BlogBundle\Repository\BlogRepository")  * @ORM\Table(name="blog")  * @ORM\HasLifecycleCallbacks()  */ class Blog {     // .. } 

the annotation @ORM\Entity(repositoryClass="Blogger\BlogBundle\Repository\BlogRepository") is required.

And don't forget to regenerate entities:

php app/console doctrine:generate:entities Blogger 

UPDATE

Remove annotation @ORM\Entity. It overrides correct annotation @ORM\Entity(repositoryClass="Blogger\BlogBundle\Repository\BlogRepository")

like image 199
Molecular Man Avatar answered Oct 06 '22 10:10

Molecular Man


In my case adding proper annotation was insufficient.
Deleting Doctrine Cache by php app/console doctrine:cache:clear-metadata also not worked.

I generate my entities from database by commands

php app/console doctrine:mapping:import --force AcmeBlogBundle xml
php app/console doctrine:mapping:convert annotation ./src
php app/console doctrine:generate:entities AcmeBlogBundle

First command generate orm.xml file for each DB Table in my project. After DELETING all orm.xml files Annotations started work properly.

like image 22
user4011534 Avatar answered Oct 06 '22 10:10

user4011534