2012-08-30 9 views
40

मैं पृष्ठांकन करने के लिए कोशिश कर रहा हूँ, लेकिन वहाँ एक त्रुटि है:उपयोग को सीमित और Doctrine2 क्वेरी में ऑफसेट

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

मैं काफी यकीन है कि नहीं करता है, तो यह सही वाक्य रचना (और तर्क) बनाने के लिए है मेरी क्वेरी:

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(); 
} 

मित्र और उन से संबंधित हैं manyToOne और oneToMany, मित्र तालिका में तो वहाँ एक क्षेत्र है - user_id।

यह मेरा नियंत्रक में है:

$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); 

मुझे पता है कि यह ($page*$FR_PER_PAGE होने के लिए विशेष रूप से तीसरे पैरामीटर) बेवकूफ और यहां तक ​​कि गलत है, लेकिन मैं तो बस, बशर्ते क्वेरी काम करता है की कोशिश करना चाहता था, और यह नहीं था ' टी।

+0

आप इसे काम नहीं किया क्या मतलब था? कोई त्रुटि प्राप्त करें? आपको सीधे डीक्यूएल में डालने की बजाय 'सेट पैरामीटर ("उपयोगकर्ता", $ उपयोगकर्ता)' का उपयोग करना चाहिए। साथ ही, आपकी इकाई परिभाषाओं को देखना अच्छा लगेगा। संपादित करें: बस संपादन को देखा। 'ऑफसेट' – Flukey

+0

में जोड़ा गया एक स्थान होना चाहिए हां, मुझे एक त्रुटि मिलती है - यह प्रश्न की भिक्षा में है। – Faery

+0

यह बंडल आपके लिए ब्याज का हो सकता है: http://knpbundles.com/KnpLabs/KnpPaginatorBundle – Flukey

उत्तर

96

नहीं। उपयोग:

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

लेकिन परिणाम कहां से शुरू किए जाने से सेट करें? – Faery

+0

मैंने अपना जवाब अपडेट किया! –

+0

बिल्कुल सही! आपका बहुत बहुत धन्यवाद! – Faery

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

मुझे यह और अधिक उपयोगी मिला क्योंकि मैं findBy() फ़ंक्शन का उपयोग करना चाहता था – Christian

1

आप भी उपयोग कर सकते हैं

$ query-> getSingleResult();

14

आप findBy सिद्धांत भंडार की विधि के तीसरे और चौथे पैरामीटर का उपयोग कर सकते हैं, जो limit और offset हैं।

यहाँ विधि परिभाषा है:

findBy( array $criteria, array $orderBy = null, integer|null $limit = null, integer|null $offset = null )

स्रोत: http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.EntityRepository.html

संबंधित मुद्दे