2011-03-24 47 views
6

我有一個奇怪的問題。以下是錯誤消息:學說2,未定義的實體方法findOneBy *

調用未定義的方法MyProject\BlogBundle\Entity\Blog::findOneById()

我已經設置了映射,實體類是使用控制檯創建,我已經更新了數據庫的模式。什麼可能導致這個問題?

我正在使用symfony2。這裏是行:

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

任何想法?

回答

8

findOneById不存在,嘗試

$ blogRepo-> findOneBy(陣列( 'ID'=> $ ID));

其中'id'是您實體中的現有字段。

你可以在這裏查看主義的類文檔:EntityRepository

編輯:看起來像findOneById不只要實體有一個字段「ID」的存在。 Check the docs。 THX到賴亞爾指點出來

+0

是的,還有'$ entity = $ em-> getRepository('VendorSomeBundle:Post') - > findOneById($ id)'也可以。但是你必須確保Post實體具有屬性。請記住,存儲庫不等同於symfony1的'* Table'類。實體應該知道映射關係和偏好。 – renoirb 2012-04-08 20:49:05

+1

'findOneById'是一個有效的魔術方法,假設實體上有一個'id'字段。 http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#by-simple-conditions – Ryall 2012-09-17 16:45:07

+0

thx用於指出 – Maragues 2012-09-18 07:28:26

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服用。

+0

我想明白你的意思'MyProject的\域\ *'這是一個'Entity'類? – renoirb 2012-04-08 20:58:38

+0

是的,'MyProject \ Domain \ User'是一個實體。 – igorw 2012-04-08 21:01:39

0

試試這個

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

getRepository