2015-06-07 5 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.typeName с sSearch, тогда как мне это сделать. Я пробовал следующее:

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

Но это дает ошибку. На самом деле я хочу сделать это для данных. Чтобы сохранить поле родительского класса под опцией поиска. Есть ли способ сделать это с помощью объекта родительского класса? Можете ли вы, ребята, помочь?

My Domain Audio Domain >>

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 
    } 
} 

домен StreamType >>

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 of: 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) значения: [ streaming[email protected]2c4cbe48] ' –