Doctrine orm 条令2,未定义实体法findOneBy*

Doctrine orm 条令2,未定义实体法findOneBy*,doctrine-orm,symfony,Doctrine Orm,Symfony,我有一个奇怪的问题。以下是错误消息: 调用未定义的方法MyProject\BlogBundle\Entity\Blog::findOneById() 我已经设置了映射,实体类是使用控制台创建的,我已经更新了数据库中的模式。是什么导致了这个问题 我用的是symfony2。这是一句话: $blogRepo = $this->get('myproject.blog.repository.blog'); $blog = $blogRepo->findOneById($id); 有什

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

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

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

我用的是symfony2。这是一句话:

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

有什么想法吗?

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

您也可以让EntityManager动态创建一个存储库类,而不是创建自己的存储库类

$user = $em->getRepository('MyProject\Domain\User')->find($id);
甚至更短:

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

取自。

findOneById不存在,请重试

$blogRepo->findOneBy(数组('id'=>$id))

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

您可以在此处查看条令的类别文档:

编辑:只要实体有一个字段“Id”,findOneById看起来就存在。感谢Ryall指出这一点

试试这个

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

getRepository

是的,而且
$entity=$em->getRepository('VendorSomeBundle:Post')->findOneById($id)
也可以。但是您必须确保Post实体具有该属性。请务必记住,存储库不是symfony1的
*表
类的等价物。实体应该已经知道映射、关系和首选项。
findOneById
是一种有效的魔术方法,假设实体上有一个
id
字段。我想理解你所说的
MyProject\Domain\*
这是一个
实体
类吗?是的,
MyProject\Domain\User
是一个实体。