Doctrine 2,未定义的实体方法findOneBy *

时间:2011-03-24 21:32:32

标签: doctrine-orm symfony

我有一个奇怪的问题。以下是错误消息:

调用未定义的方法MyProject\BlogBundle\Entity\Blog::findOneById()

我已经设置了映射,实体类是使用控制台创建的,我已经更新了数据库中的模式。可能导致这个问题的原因是什么?

我正在使用symfony2。这是一行:

$blogRepo = $this->get('myproject.blog.repository.blog');  
$blog = $blogRepo->findOneById($id);  

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

findOneById不存在,请尝试

  

$ blogRepo-> findOneBy(array('id'=> $ id));

其中“id”是您实体中的现有字段。

您可以在此处查看Doctrine的课程文档:EntityRepository

编辑:看起来像findOneById确实存在,只要该实体具有字段“Id”即可。 Check the docs。感谢Ryall指出它

答案 1 :(得分:5)

myproject.blog.repository.blog的服务定义是什么?看起来您将它映射到MyProject\BlogBundle\Entity\Blog,而它确实应该是MyProject\BlogBundle\Entity\BlogRepository

而不是创建自己的Repository类,您也可以通过EntityManager动态创建一个。

$user = $em->getRepository('MyProject\Domain\User')->find($id);

甚至更短:

$user = $em->find('MyProject\Domain\User', $id);

取自the Doctrine2 ORM Documentation

答案 2 :(得分:0)

试试这个

$blogRepo = $this->getRepository('myproject.blog.repository.blog');  
$blog = $blogRepo->findOneById($id);  

<强> getRepository