2011-03-24 20 views
6

Mam dziwny problem. Oto komunikat błędu:Doctrine 2, undefined entity method findOneBy *

Zadzwoń do niezdefiniowanej metody MyProject\BlogBundle\Entity\Blog::findOneById()

Mam konfiguracji mapowanie klasa podmiot został utworzony za pomocą konsoli i I zostały zaktualizowane schematu w bazie danych. Co może być przyczyną tego problemu?

Używam symfony2. Oto linia:

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

Jakieś pomysły?

Odpowiedz

8

findOneById nie istnieje, spróbuj

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

gdzie "id" jest istniejącym polem w twoim Podmiocie.

Można sprawdzić dokumentację doktryny swojej klasie tutaj: EntityRepository

Edycja: wygląda findOneById istnieje tak długo, jak jednostka ma pole „ID”. Check the docs. Thx do Ryall za wskazanie go

+0

Tak, a także '$ entity = $ em-> getRepository ('VendorSomeBundle: Post') -> findOneById ($ id)' też by działało. ALE musisz upewnić się, że jednostka Post ma atrybut. Ważne jest, aby pamiętać, że repozytorium NIE jest odpowiednikiem klasy '* Table' programu symfony1. Jednostka powinna już znać mapowanie oraz relacje i preferencje. – renoirb

+1

'findOneById' jest prawidłową metodą magiczną, zakładając, że w obiekcie znajduje się pole' id'. http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#by-simple-conditions – Ryall

+0

thx za wskazanie tego – Maragues

5

Jaka jest definicja usługi myproject.blog.repository.blog? Wygląda na to, że mapujesz go na MyProject\BlogBundle\Entity\Blog, podczas gdy naprawdę powinien być MyProject\BlogBundle\Entity\BlogRepository.

Zamiast tworzyć własną klasę repozytorium, można również utworzyć ją w locie przez EntityManager.

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

Albo jeszcze krócej:

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

Zrobione z the Doctrine2 ORM Documentation.

+0

Chciałbym zrozumieć, co masz na myśli przez 'myproject \ domena \ *' 'czy jest to klasa Entity' ? – renoirb

+0

Tak, 'MójProjekt \ Domena \ Użytkownik' jest jednostką. – igorw

0

spróbować tej

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

getRepository