2011-09-01 9 views
8

मैं निम्नलिखित प्रश्न हैं:मैं सिद्धांत 2 में संबंधित इकाई परिणाम को कैसे सीमित कर सकता हूं?

$query = $this->getEntityManager()->createQuery(' 
         SELECT m FROM MyCoreBundle:Motivation m 
         WHERE m.user = :user 
         ORDER BY m.date DESC'); 

$query->setParameter('user',$user); 
$query->setFirstResult(0); 
$query->setMaxResults(1); 
//@TODO if there is not result recorded for the user, return sth which indicates this 
return $query->getResult(); 
:

$query = $this->getEntityManager()->createQuery(' 
         SELECT u, p, m 
         FROM MyCoreBundle:User u 
         JOIN u.programmes p 
         JOIN u.motivation m 
         '); 

$result = $query->getResult(); 

मैं प्रेरणा प्रतिबंधित करना चाहते हैं इस दूसरे क्वेरी जो मैं कहीं और उपयोग कर रहा हूँ (प्रेरणा भंडार पर) का परिणाम माना प्रत्येक उपयोगकर्ता के लिए लौट आए वस्तुओं

क्या पहली क्वेरी में प्रेरणा को सीमित करने और प्रतिबंधित करने का कोई तरीका है या बेहतर दृष्टिकोण?

+1

नीचे लिखा ध्यान में रखते हुए और यह सोचते हैं कि "नवीनतम motiviation" आप के लिए प्राथमिक महत्व का है और यह हो जाएगा बहुत अधिक उपयोग किया गया, संभावित समाधान 'उपयोगकर्ता: नवीनतम मोटाइवेशन' OneToOne relatinship बनाने के लिए है। और फिर हर बार एक नई 'प्रेरणा' इकाई को जोड़ा जाता है, (सिद्धांत 'prePersist' घटनाओं के माध्यम से) नए जोड़े गए 'के साथ' नवीनतम मोशन 'अपडेट करें। इस तरह आप नवीनतम प्रेरणा प्राप्त करने वाले कई 'उपयोगकर्ता' रिकॉर्डों को फिर से शुरू करने में सक्षम होंगे। एचटीएच –

उत्तर

14

आप संयुक्त पंक्तियों की संख्या को सीमित नहीं कर सकते हैं।

आप सिद्धांत 2.1 है, तो आप संग्रह पर ->slice() उपयोग कर सकते हैं:

$collection = $user->getMotivations(); // returns a LazyCollection, 
              // makes no SQL query 

$motivations = $collection->slice(0, 20); // queries the first 20 motivations 
              // for this user (if the association 
              // was not fetch-joint) 

देखें http://www.doctrine-project.org/docs/orm/2.0/en/tutorials/extra-lazy-associations.html

+0

धन्यवाद - मुझे अपनी उपयोगकर्ता इकाई में एक और विधि जोड़कर इसे गोल किया गया है जो केवल एक प्रेरणा प्रविष्टि जोड़ता है, ऑब्जेक्ट पर लूपिंग करता है और $ प्रेरणा संपत्ति को ओवरराइट करता है। गंदा लेकिन यह काम करता है। – codecowboy

+2

@ amaud576875 अनजाने में स्लाइस विधि केवल मौजूदा उपयोगकर्ता के लिए एसोसिएशन शुरू करती है। यदि आप एकाधिक उपयोगकर्ताओं पर लूप करते हैं तो कई प्रश्न उत्पन्न होते हैं। क्या सभी उपयोगकर्ताओं के लिए कटा हुआ संग्रह लाने का कोई तरीका है? –

+1

@PetrPeller मुझे एक ही समस्या है। क्या आपने इसे हल करने में कामयाब रहे? – svlada