2017-10-11 72 views
0

使用域實例Grails中查找子域,我怎麼找到的子域使用域實例Grails中

讓說,我有

class Family { 
    Integer id 
    Parent parent 
} 


class Parent { 
    Interger id 
    static hasMany = [children: Child] 
} 

class Child { 
    String name 
} 

所以在控制器,

Parent mom = Family.findById(1).parent 

所以現在,如何使用mom在父母中獲得name == "Child"的孩子?
它甚至有可能嗎?

回答

0

我認爲這應該工作。

Child child = mom.children.find { it.name == 'child' } 

但我不建議使用這種查詢。 Grails有很多查詢方法,您可以在這裏閱讀http://gorm.grails.org/latest/hibernate/manual/index.html#querying。我還向您推薦本指南http://guides.grails.org/querying-gorm-dynamic-finders/guide/index.html其關於動態查找器的問題,與使用常規採集方法進行查詢的查詢不同。

我希望它的幫助下充分

+0

這在這個特定情況下適用於我,但我會牢記這些文檔。謝謝 – StrandedHere

0

可以使用criteria API爲:

Parent.withCriteria { 
    children { 
     eq("name", "Bob") 
    } 
} 

在這個例子中children將被連接到parent。所有的父母都會被退回,有一個叫做「鮑勃」的孩子。

0

您可以簡單地使用封閉的findAll {}這樣:

def childrenList=mom.findAll{it.children.each{ 
        if(it.name=='child') 
         return it 
        } 
        } 

這會給你的名字「兒童」對象所有孩子的名單。

0

正如@ user615274所建議的,接受的解決方案有效,但可能會有性能問題。

Grails閃耀的一個特徵是動態查詢。我會修改子域並使用動態查詢。例如。

由於父母「的hasMany」關係到孩子,孩子「屬於關聯」父

class Child { 
    String name 

    Parent parent 
    // or static belongsTo = [parent:Parent] 
} 

一旦這種關係建立,那麼你可以使用動態查詢

def child = Child.findByParent(mom) // return the first matching result 
def children = Child.findAllByParent(mom) // returns a list of matching result 

我希望這有助於。

+0

我明白,屬於也會工作,但在這種特殊情況下,我需要一種方法來提取信息而不必更改域,謝謝。 – StrandedHere