2012-08-30 34 views
40

Tôi đang cố gắng để làm pagination, nhưng có một lỗi:Sử dụng Hạn chế và Offset trong Doctrine2 truy vấn

[Syntax Error] line 0, col 57: Error: Expected end of string, got 'limit'

Tôi không hoàn toàn chắc chắn nếu điều này là đúng cú pháp (và logic) để làm truy vấn của tôi:

public function getFriendsFromTo ($user, $limit, $offset) 
{ 
    return $this->getEntityManager() 
     ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.user='.$user.' limit '.$limit. 'offset' .$offset) 
     ->getResult(); 
} 

Bạn bè và người dùng có liên quan nhiềuToTo và OneToMany, vì vậy trong bảng bạn bè có một trường - user_id.

Đây là trong điều khiển của tôi:

$user = $this->get('security.context')->getToken()->getUser(); 
$id = $user->getId(); 

$friends = $user->getFriends(); 
$result = count($friends) 
$FR_PER_PAGE = 7; 
$pages = $result/$FR_PER_PAGE; 

$em = $this->getDoctrine()->getEntityManager(); 
$friends = $em->getRepository('EMMyFriendsBundle:Friend') 
     ->getFriendsFromTo($id, $FR_PER_PAGE, $page*$FR_PER_PAGE); 

Tôi biết rằng đó là ngu ngốc và thậm chí sai (đặc biệt là tham số thứ ba là $page*$FR_PER_PAGE), nhưng tôi chỉ muốn thử nếu truy vấn hoạt động, và nó didn' t.

+0

bạn ấy có ý gì nó đã không làm việc? nhận được bất kỳ lỗi nào? Bạn cũng nên sử dụng 'setParameter (" user ", $ user)' thay vì chèn nó trực tiếp vào DQL. Ngoài ra, nó sẽ là tốt đẹp để xem định nghĩa thực thể của bạn. EDIT: chỉ cần nhìn thấy chỉnh sửa. Nên có một không gian được nối thêm vào 'offset' – Flukey

+0

Có, tôi gặp lỗi - đó là việc bắt đầu câu hỏi. – Faery

+0

Gói này có thể bạn quan tâm: http://knpbundles.com/KnpLabs/KnpPaginatorBundle – Flukey

Trả lời

96

Không. Sử dụng:

return $this->getEntityManager() 
     ->createQuery('...') 
     ->setMaxResults(5) 
     ->setFirstResult(10) 
     ->getResult(); 
+0

Nhưng làm thế nào để thiết lập từ nơi kết quả sẽ bắt đầu? – Faery

+0

Tôi đã cập nhật câu trả lời của mình! –

+0

Hoàn hảo! Cảm ơn nhiều! – Faery

27
$towary = $this->getDoctrine() 
    ->getRepository('AcmeStoreBundle:Towar') 
    ->findBy(array(),array(),10,($current-1)*$numItemsPerPage); 
+0

Tôi thấy điều này hữu ích hơn vì tôi muốn sử dụng hàm findBy() – Christian

1

bạn cũng có thể sử dụng

$ query-> getSingleResult();

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