2014-06-18 6 views
3

Я работаю с Grails и MongoDB. У меня есть два класса домена User и AddWebsite. Пользователь имеет несколько веб-сайтов, и каждый веб-сайт принадлежит пользователю. Классы домена следующим образом:GORM Запрос нескольких коллекций

class AddWebsite{ 
String website 
User user 
static belongsTo = [user: User] 
static constraints = { 
    website url:true 
    user nullable:true 
} 
} 

Другой класс домена выглядит следующим образом:

class User { 
    String login 
    String password 
    static hasMany = [ 
     addWebsites: AddWebsite 
    ] 
    static mapping = { 
     addWebsites cascade:"all-delete-orphan" 
     } 
    static constraints = { 
     } 
    } 

мне нужно запросить таблицу AddWebsite, основанную на вошедшего в систему пользователя и получить веб-сайты, которые конкретный пользователь. Может ли кто-нибудь предложить какой-либо подход?

ответ

1
You need to create a createCriteria List as follow 

def c = AddWebsite.createCriteria() 
def results = c.list { 

      //find the user based on the relationship 
      user { 

        ideq(userobj?.id.toLong()) 

       } 

      //you can user projection here if u need a single value 

    } 
1

Я не использовал MongoDB, но так как GORM поддерживает его я предполагаю, что пример запроса будет делать то, что вам нужно:

AddWebsite.findAllByUser(userObj)

Если вы просто хотели сайт строк, то это должно работать:

def userWebsites = AddWebsite.findAllByUser(userObj)*.website

Где userWebsites будет List<String>

Для получения дополнительной информации см. http://grails.org/doc/latest/ref/Domain%20Classes/findAllBy.html.

Кстати, вам не нужен «Пользовательский пользователь» в вашем классе AddWebsite, так как вы назвали «user» в своем списке.

+0

Спасибо за ссылку. Это действительно полезно. –

2

Я использовал этот подход. Не может быть наиболее эффективным, но он работает.

def showWebsites(){ 
    def p = User.findByLogin(session["user"].login) 
    def websites = AddWebsite.findAllByUser(p['_id']) 
    [websitesList: websites] 
} 

И в моем GSP у меня есть:

<g:select name="websiteSelection" from="${websitesList.website} " /> 
Смежные вопросы