Помощь в создании моделей для видов - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь создать модель для перехода в представление gsp. Я хотел бы сделать подзапрос для двух таблиц. У меня есть два домена, alum_profile и alum_position. У alum_profile есть много alum_position. alum_position принадлежит alum_profile. В SQL, если бы я хотел создать набор результатов, у меня было бы что-то вроде этого:

Select count(id), 
 (Select CONCAT(first_name, ' ', last_name)
    From alum_profile
    where 
    alum_profile_id =alum_profile.id ) as Person        
 FROM alum_position
 GROUP BY  alum_profile_id
 ORDER BY count(id) DESC      

Как мне сделать это с HQL и создать модель, которую можно передать в gsp View.

Спасибо за вашу помощь Ясон
Я использую Spring Source, с MySQL и пишу в Groovy на Grails

1 Ответ

0 голосов
/ 25 июня 2011

Из того, что я прочитал по вашему вопросу, вы хотите отобразить список имен профиля, а также количество позиций каждого профиля, отсортированных по количеству позиций, desc.

Во-первых, вам нужны модели:

class AlumProfile {
   String first_name
   String last_name

   def hasMany = [positions: AlumPosition]
};

class AlumPosition {
   String name  // I just added this, no idea what you need in here

   def belongsTo=AlumProfile
};

Теперь вы хотите создать список AlumProfiles, отсортированный по количеству позиций. В вашем контроллере вам нужно:

def allByPositionCount = {
   def profiles = AlumProfile.list().sort( [compare: { a,b -> a.positions.size().compareTo( b.positions.size() ) }] as Comparator );
   [ profiles: profiles ]
}

При этом файл allByPositionCount.gsp будет отображаться с моделью, содержащей элемент «profile», представляющий собой список профилей в правильном порядке, что-то вроде:

<g:each in="${profiles}" var="profile" >
    ${profile.first_name} ${profile.last_name} has ${profiles.positions.size()} positions
</g:each>

должен сделать то, что вы хотите.

...