2012-11-19 25 views
6

मैं एक खोज में क्रम, क्रम, अधिकतम और ऑफसेट को एकीकृत करना चाहता हूं। निम्नलिखित ठीक काम करता है:Grails खोज क्रम, आदेश, अधिकतम और ऑफसेट के साथ?

def books = Book.findAll("from Book as b where b.approved=true order by b.dateCreated desc", [max: max, offset: offset]) 

लेकिन क्या मैं चाहता हूँ है:

def books = Book.findAll("from Book as b where b.approved=true", [sort: 'dateCreated', order: 'desc', max: max, offset: offset]) 

यह काम नहीं करता। मुझे इसे फिर से लिखना कैसे है?

उत्तर

7

HQL तरह और पैरामीटर के रूप में आदेश का समर्थन नहीं करता है, तो आप HQL अभिव्यक्ति के हिस्से के रूप

def books = Book.findAll("from Book as b where b.approved=true" 
    + " order by b.dateCreated desc", [max: max, offset: offset]) 

(या इस मामले में सिर्फ Book.findAllByApproved(true, [...]) का उपयोग करने के बजाय HQL) "द्वारा आदेश" शामिल करने की ज़रूरत ।

तो तुम जैसे

def books = Book.findAll("from Book as b where b.approved=true" 
    + (params.sort ? " order by b.${params.sort} ${params.order}" : ''), 
    [max: max, offset: offset]) 
+0

इस उत्तर नहीं है का उपयोग कर सकते पैरामीटर मैप में और अधिक आइटम जोड़ सकते हैं प्रश्न। मैं इस क्वेरी में चर के रूप में सॉर्ट और ऑर्डर कैसे शामिल कर सकता हूं? – confile

+0

@userWebMobile संपादित देखें। –

+0

आप इसका उपयोग क्यों करते हैं: ''? – confile

6

एक चाल की जरूरत है प्रकार और आदेश चर हैं जहां क्वेरी मेरे लिए काम करता एक का उपयोग करना:

def books = Book.where{approved == true}.list(sort: 'dateCreated', order: 'desc', max: max, offset: offset)

या पेज से सीधे पैरामीटर वाला:

def books = Book.where{approved == true}.list(params)

0

"findAllBy" का उपयोग करना क्योंकि यह सॉर्ट और ऑर्डर का समर्थन करता है।

def results = Book.findAllByTitle("The Shining", 
      [max: 10, sort: "title", order: "desc", offset: 100]) 

विवरण के लिए here पर क्लिक करें।

0

मुझे लगता है कि आप पुस्तकों की सूची को नियंत्रक या सेवा कक्षा में लाने के लिए बुला रहे हैं।

यदि आप इसे नियंत्रक कार्रवाई से कॉल कर रहे हैं, तो एक जादू चर "पैराम्स" आपके लिए पहले से ही उपलब्ध है। उदाहरण के लिए, यदि आप पृष्ठ का अनुरोध के रूप में इस प्रकार है

book/list?max=10&offset=2 

फिर "पैरामीटर" पहले से ही उन मूल्यों को पूर्ण रूप से अपने मैप किया गया होगा।

आप के रूप

params.sort = "dateCreated" 
params.order = "desc" 

इस प्रकार एक बार आप अपने परम का निर्माण किया है के रूप में वांछित है, तो आप Grails गतिशील क्वेरी के रूप में इस प्रकार है

def books = Book.findAllByApproved(true, params) 
// use "books" variable as you wish