2015-06-07 55 views
0

我正在使用grails 2.4.2。我需要創建一個基於查詢類似關鍵字的列表。假設這是一個例子>>grails用父類和子域的查詢創建一個列表

def results = c.list(max: iDisplayLength, offset: iDisplayStart) { 
      and { 
//    eq("activeStatus", ActiveStatus.ACTIVE) 

      } 
      if (sSearch) { 
       or { 
        ilike('title', sSearch) 
        ilike('shortDesc', sSearch) 
       } 
      } 
     } 

在這裏,我可以搜索字段與sSearch參數。但是,假設在這個域中我有一個名爲Parent parent的父域實例。現在,如果我也想用sSearch檢查parent.typeName的值,那麼我應該怎麼做。我試過如下>>

 or { 
      ilike('title', sSearch) 
      ilike('shortDesc', sSearch) 
      ilike('parent.typeName', sSearch) 
     } 

但它給出了錯誤。其實我想爲數據表做這個。在搜索選項下保留父類字段。有什麼辦法與父類對象做到這一點?你們能幫忙嗎?

我的域名 音頻領域>>

package streaming 

class Audio { 
    static mapping = { 
     table('audio') 
     version(false) 
    } 

    String title 
// StreamType streamType 
    String shortDesc 
    String filePath 
    String imagePath 
    String imageName 
    int downloadCount 
    boolean isActive 

    static belongsTo = [streamType: StreamType] 

    static constraints = { 
     title(nullable: false, blank: false,unique: true) 
     shortDesc(nullable: false, blank: false) 
     filePath(nullable: false, maxSize: 2000) 
     imagePath(nullable: false, maxSize: 2000) 
     imageName(nullable: false) 
     downloadCount(nullable: true) 
    } 
    String toString(){ 
     return title 
    } 
} 

流類型域>>

package streaming 

class StreamType { 
    static mapping = { 
     table('stream_type') 
     version(false) 
    } 

    String typeName 

    static hasMany = [audio: Audio, video: Video] 

    static constraints = { 
     typeName(nullable: false, blank: false) 
    } 
    String toString(){ 
     return typeName 
    } 
} 
+0

您可以直接訪問父屬性,沒有必要提及父母。嘗試'ilike('typeName',sSearch)' – user1690588

+0

@ user1690588我試過你的方式,但它顯示以下錯誤>>'消息:無法解析屬性:typeName:streaming.Audio' –

+0

你能發佈你的域名嗎? – user1690588

回答

1

您可以通過將StreamType域屬性置於streamType關閉或alias訪問域屬性。

通過closure-

or { 
    ilike('title', sSearch) 
    ilike('shortDesc', sSearch) 
    streamType { 
     ilike('typeName', sSearch) 
    } 
} 

通過別名 -

or { 
    ilike('title', sSearch) 
    ilike('shortDesc', sSearch) 
    createAlias('streamType', '_streamType') 
    ilike('_streamType.typeName', sSearch) 
} 
+0

他們兩個都像魔術一樣工作,非常感謝 –

0
def results = c.list(max: iDisplayLength, offset: iDisplayStart) { 
     and { 
      eq("activeStatus", ActiveStatus.ACTIVE) 
     } 

     if (sSearch) { 
      or { 
       ilike('title', sSearch) 
       ilike('shortDesc', sSearch) 
       Parent{ 
        ilike('typeName', sSearch) 
       } 
      } 
     } 
    } 

不知道父進程內或但這是你將如何訪問父母財產。

+0

感謝您的回覆,但它顯示此錯誤沒有方法的簽名:streaming.AudioService.Parent()適用於參數類型:(streaming.AudioService $ _tt__audioPaginateList_closure4_closure7_closure8)values:[ streaming[email protected]2c4cbe48]' –