كيفية الطلب بأكثر من حقل في Grails؟
-
11-07-2019 - |
سؤال
هل هناك طريقة للحصول على قائمة مرتبة حسب حقلين، قل الأسماء الأخيرة والأولى؟
أنا أعرف .listOrderByLastAndFirst
و .list(sort:'last, first')
لن ينجح.
المحلول
هذا الحل القديم لم يعد يعمل.يرجى الاطلاع على إجابة mattlary أدناه
قد يتعين عليك كتابة مكتشف مخصص في HQL أو استخدام Criteria Builder.
MyDomain.find("from Domain as d order by last,first desc")
أو
def c = MyDomain.createCriteria()
def results = c.list {
order("last,first", "desc")
}
نصائح أخرى
Hates_ معايير الجواب لا يبدو أن العمل بالنسبة لي. ووضع "last,first"
من أجل تتسبب فقط استثناءات قائلا "Property 'last,first' not found"
. لطلب على حقلين، يمكنك القيام بما يلي:
def c = MyDomain.createCriteria()
def results = c.list {
and{
order('last','desc')
order('first','desc')
}
}
وهذه هي قديمة جدا ولكن ساعدني في العثور على حل مناسب. A "أنظف" مثال التعليمات البرمجية باستخدام withCriteria الاختصار:
def c = MyDomain.withCriteria {
and {
order('last', 'desc')
order('first', 'desc')
}
}
ومعايير ترتيب أكثر تعقيدا، (اختبار في الكؤوس المقدسة 2.1.0)
def c = MyDomain.withCriteria {
property {
order('last', 'desc')
}
order('first', 'desc')
}
وأنواع أولا ثم MyDomain.property.last التي كتبها MyDomain.first
ويعمل هذا الاستعلام على أساس الحقل الأول. عندما يكون الحقل الأول فارغ ثم قلل من قبل الحقل الثاني.
order('last','desc')
order('first','desc')
وأعتقد أن المعايير هو أفضل رهان، ولكن يمكنك فعل الشيء الصحيح من خلال محاولة مكتشف أولا. عند استرداد كائنات المجال من GORM، والترتيب الصحيح لجعل محاولة هو: مكتشف الحيوية، المعايير، HQL
ويمكنك القيام بذلك
def results=MyDomain.findAll([sort:"last",order:'desc'],[sort:"first",order:'desc']);
وهذا سطر من التعليمات البرمجية سوف أولا فرز نتائج من الدرجة نطاق "MYDOMAIN" أولا حسب الاسم الأخير ثم حسب الاسم الأول للشخص.
MyDomain.findAll(sort: ['first': 'desc','last':'desc'])
ويعمل مع الكؤوس المقدسة، مخزن البيانات، GORM: 6.0.3
إذا كنت تقوم بفرز القوائم بناءً على محتويات عناصرها، فستحتاج إلى تطبيق مقارنة تحتوي على بعض الذكاء لتمكينك من تحديد ترتيب الفرز بناءً على خصائص متعددة.
يتم عرض بعض الأمثلة على مقارنات أسلوب Groovy هنا
ومع ذلك، إذا تم إرجاع القائمة التي تقوم بفرزها من استعلام قاعدة بيانات، فمن الأفضل فرزها باستخدام CrteriaQuery والفرز على ذلك
وأنا لديها نفس المشكلة. منذ قائمتي ليست كبيرة جدا، وأنا استخدم نوع رائع، كما أريد لفرز على حقول المجال المرتبط: CalendarData -> الجذب
def listCalendar (Calendar calendar) {
respond CalendarData.where {
calendar == calendar
}.list().sort{ "$it.attraction.type?:' '$it.attraction.name" }
}