繁体   English   中英

Grails域类带有参数的.list()方法

[英]grails domain class .list() method with params

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

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

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

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

当我按下这个actionSubmit可以user.id与请求一起发送,这是内PARAMS地图(我与调试检查的话),但由于某种原因Association.list(params)尽管我返回所有协会(对所有用户) m在params中使用此user.id。 也尝试将user.id重命名为user ,但也没有用。 似乎这样的.list()应该仅用于排序,否则我做错了。 你能帮我吗? 谢谢!

为了阐明给定的答案: list( params )返回域对象的所有结果,并且仅接受排序(order by)和视口(限制/偏移)参数。 它不提供任何where子句(很好,除了discriminator -column之外)

更新:

您可以使用findAllBy*

Association.findAllByUserId( params.long( 'user.id' ), params )

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
}

根据Grails文档 ,list不会将id作为参数。

看到您的最大值,它将是Association.list(max: max) ,对于您想要的东西,它类似于:

Association.findAllByUserId(params.id, [max: max])

其中params.id包含所需用户的id (或params['user.id'] )。

有关findAllBy的更多信息...

不确定先前的回应,但:

Association.where { 
  user {
    eq 'id', params['user.id']
  }
} .list()

如果使用分页,则可以将参数添加到列表呼叫。

另一个解决方案:

def index(User user) {
  respond user.associations, , model:[associationInstanceCount: user.associations.size()]
}

但是您必须将参数命名为“ id”,这主要取决于您如何设计域对象以及此处的目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM