2011-03-24 64 views
6

Tôi gặp vấn đề lạ. Dưới đây là thông báo lỗi:Doctrine 2, phương thức thực thể không xác định findOneBy *

Gọi phương pháp xác định MyProject\BlogBundle\Entity\Blog::findOneById()

tôi đã thiết lập các bản đồ, các lớp thực thể được tạo ra bằng cách sử dụng giao diện điều khiển và tôi đã cập nhật các lược đồ trong cơ sở dữ liệu. Điều gì có thể gây ra vấn đề này?

Tôi đang sử dụng symfony2. Đây là dòng:

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

Bất kỳ ý tưởng nào?

Trả lời

8

findOneById không tồn tại, hãy thử

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

trong đó 'id' là trường hiện tại trong Pháp nhân của bạn.

Bạn có thể kiểm tra tài liệu hướng dẫn lớp học của Học thuyết ở đây: EntityRepository

Edit: trông giống như findOneById không tồn tại miễn là thực thể có một trường "Id". Check the docs. Thx để Ryall cho trỏ nó ra

+0

Có, và cũng '$ entity = $ em-> getRepository ('VendorSomeBundle: Post') -> findOneById ($ id)' cũng sẽ hoạt động. NHƯNG bạn phải đảm bảo thực thể Bài đăng có thuộc tính. Điều quan trọng cần nhớ là kho lưu trữ KHÔNG tương đương với lớp '* Table' của symfony1. Các thực thể có thể biết đã được lập bản đồ và các mối quan hệ và sở thích. – renoirb

+1

'findOneById' là một phương thức ma thuật hợp lệ, giả sử có trường' id' trên thực thể. http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#by-simple-conditions – Ryall

+0

thx để chỉ ra điều đó – Maragues

5

Định nghĩa dịch vụ của myproject.blog.repository.blog là gì? Có vẻ như bạn đang ánh xạ nó tới MyProject\BlogBundle\Entity\Blog trong khi thực sự là MyProject\BlogBundle\Entity\BlogRepository.

Thay vì tạo lớp Repository của riêng bạn, bạn cũng có thể tạo một lớp Repository bằng trình EntityManager.

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

Hoặc thậm chí ngắn hơn:

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

Taken từ the Doctrine2 ORM Documentation.

+0

Tôi muốn hiểu những gì bạn có ý nghĩa bởi 'MyProject \ Domain \ *' là này một 'Entity' lớp ? – renoirb

+0

Có, 'MyProject \ Domain \ User' là một thực thể. – igorw

0

thử

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

getRepository này

Các vấn đề liên quan