2011-03-24 13 views
6

Tengo un problema extraño. Aquí está el mensaje de error:Doctrine 2, método de entidad indefinido findOneBy *

La llamada al método definido MyProject\BlogBundle\Entity\Blog::findOneById()

He fijado el mapeo, la clase de entidad se ha creado usando la consola y he actualizado el esquema en la base de datos. ¿Qué podría estar causando este problema?

Estoy usando symfony2. Aquí está la línea:

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

¿Alguna idea?

Respuesta

8

findOneById no existe, trate

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

donde 'id' es un campo existente en su Entidad.

Puede comprobar la documentación de la clase de la Doctrina aquí: EntityRepository

Editar: se parece a findOneById existe siempre que la entidad tiene un campo "ID". Check the docs. Thx a Ryall por señalarlo

+0

Sí, y también '$ entity = $ em-> getRepository ('VendorSomeBundle: Post') -> findOneById ($ id)' también funcionaría. PERO debes asegurarte de que la entidad Post TIENE el atributo. Es importante recordar que el repositorio NO ES el equivalente de la clase '* Table' de symfony1. La entidad ya debería conocer el mapeo y las relaciones y preferencias. – renoirb

+1

'findOneById' es un método mágico válido, suponiendo que hay un campo' id' en la entidad. http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#by-simple-conditions – Ryall

+0

thx para señalar eso – Maragues

5

¿Cuál es la definición de servicio de myproject.blog.repository.blog? Parece que lo está mapeando en MyProject\BlogBundle\Entity\Blog mientras que realmente debería ser MyProject\BlogBundle\Entity\BlogRepository.

En lugar de crear su propia clase de repositorio, también puede tener una creada sobre la marcha por el EntityManager.

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

O incluso más corto:

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

Tomado de the Doctrine2 ORM Documentation.

+0

me gustaría entender lo que quiere decir con 'MiProyecto \ Domain \ *' '¿Es esta una clase Entity' ? – renoirb

+0

Sí, 'MyProject \ Domain \ User' es una entidad. – igorw

0

prueba este

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

getRepository