2011-03-24 2 views
6

У меня странная проблема. Вот сообщение об ошибке:Doctrine 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

Edit: выглядит как findOneById существует до тех пор, как компания имеет поле «Id». Check the docs. Thx в Ryall для указания его

+0

Да, а также '$ entity = $ em-> getRepository ('VendorSomeBundle: Post') -> findOneById ($ id)' будет работать тоже. НО вы должны убедиться, что объект Post имеет атрибут. Важно помнить, что репозиторий НЕ является эквивалентом класса '* Table' от symfony1. Сущность может уже знать сопоставление и отношения и предпочтения. – renoirb

+1

'findOneById' - допустимый магический метод, предполагая, что на объекте есть поле' id'. http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#by-simple-conditions – Ryall

+0

thx для указания этого – Maragues

5

Что такое определение услуги 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); 

Взятые из the Doctrine2 ORM Documentation.

+0

Я хотел бы понять, что вы имеете в виду 'MyProject \ Домен \ *' является ли это класс 'Entity' ? – renoirb

+0

Да, 'MyProject \ Domain \ User' - это объект. – igorw

0

попробовать этот

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

getRepository

Смежные вопросы