Как сгруппировать результаты в Grails? - PullRequest
0 голосов
/ 07 марта 2012

У меня есть класс Project, подобный этому:

class Project {
    static hasMany = [ tasks : Tasks , users : User ]
    static belongsTo = User
    String name
    String toString() {
        this.name
    }
}

Класс пользователя, подобный этому:

class User {
    static hasMany = [ project: Project ]
    Profile profile
    String username
    String password
    String toString() {
        this.username
    }
}

И класс задач, подобный этому:

class Tasks {
    static belongsTo = [ user : User, project: Project ]
    boolean completed
    String toString(){
       this.title
    }
}

User будет иметь много Project, а Project будет иметь много Tasks.

Теперь мне нужен способ запросить БД, чтобы найти все Tasks, которые completed и принадлежат Project.Это, например, скажем, что есть два проекта, скажем P1 и P2.В котором P1 имеет 4 завершенных Tasks и P2 имеет 1 завершенных Tasks.Мой код должен возвращать что-то вроде:

[P1:[t1,t2,t3,t4],P2:[t5]]

Я знаю, что легко найти все выполненные Tasks, которые будут возвращаться так:

[t1,t2,t3,t4,t5]

Но я нахожуих сложно сгруппировать по Project.

Как я могу это сделать?

Заранее спасибо.

1 Ответ

1 голос
/ 07 марта 2012

Вы можете использовать groupBy в коллекции: API или ПРИМЕР

Например:

def completedTasks = Task.findAllByCompleted(true)
def compltedTasksByProject = compltedTasks.groupBy {it.project}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...