使用params的grails域类.list()方法

And*_*sky 1 grails grails-orm grails-domain-class

我有两个与一对多关系相关的域 - 一个用户可能有很多关联.我想查看属于该用户的所有关联.我正在使用脚手架插件.因此,应该返回AssociationController中的关联列表的代码看起来很简单:

def index(Integer max) {
    respond Association.list(params), model:[associationInstanceCount: Association.count()]
}
Run Code Online (Sandbox Code Playgroud)

在用户视图页面上,我有以下代码:

<g:form controller="Association" >
    <fieldset class="buttons">
        <g:hiddenField name="user.id" id="user.id" value="${userInstance.id}"/>
        <g:actionSubmit class="list" action="index" value="${message(code: 'default.list.label', default: 'Show Associations')}"/>
    </fieldset>
</g:form>
Run Code Online (Sandbox Code Playgroud)

当我按下这个动作user.id提交与请求一起发送并且它在params地图内(我用debug检查)但由于某种原因Association.list(params)返回所有关联(对于所有用户),尽管我在params中使用此user.id.A也尝试重命名user.id为just user,它也没有用.看起来像这样.list()应该只用于排序或者我做错了.你能帮我解决这个问题吗?谢谢!

inj*_*eer 5

澄清给定的答案:list( params )返回域对象的所有结果,并仅接受排序(order by)和view-port(limit/offset)参数.它没有提供任何where条款(除了discriminator-column之外)

更新:

你可以使用findAllBy*:

Association.findAllByUserId( params.long( 'user.id' ), params )
Run Code Online (Sandbox Code Playgroud)

或者criteria如果您需要使查询更复杂:

Association.withCriteria{
   eq 'id', params.long( 'user.id' )
   maxResults params.int( 'max' ) ?: 10
   firstResult params.int( 'offset' ) ?: 0
   if( params.sort && params.order ) order params.sort, params.order
}
Run Code Online (Sandbox Code Playgroud)