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 ?
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
Remove annotation @ORM\Entity
. It overrides correct annotation @ORM\Entity(repositoryClass="Blogger\BlogBundle\Repository\BlogRepository")
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With