tags:

views:

198

answers:

4

If I have a Client domain class, and that Client hasMany Courses. How do I find the course I'm looking for? For instance:

class Client {
    String name
    static hasMany = [courses:Course]
}

class Course {
    String name
    static belongsTo = [client:Client]
}

def client = Client.get(1)

I want to "find" or "search" within that courses relationship. Maybe something like:

client.courses.find(name:'Whatever')

Is there any way to do this with Grails?

+1  A: 

One way is with dynamic finder methods:

Courses.findAllByClientAndName(client, 'whatever')

This would get all a client's courses named 'whatever'.

Grails also has few other ways to accomplish this.

ataylor
A: 

one other way id to use criteria query dsl.

Satya
A: 

I think i figured out the way I want to do it. I just didn't notice it was a closure and not a regular method.

client.courses.find { it.name == 'whatever' }

Thanks!

intargc
+1  A: 

If you're using a second level cache and has configured it for this association you might want to iterate over the collection (this will save you a database query if the association is in cache).

Here is an example using the clever Groovy collection api.

def course = client.courses.find { it.name == "whatever" }

Important: If you decide to take this approach make sure to configure eager / batch fetching of the courses so you don't run into the n+1 problem.

Kimble