GRAILS使用参数域类.LIST()方法(grails domain class .list()

2019-10-20 18:14发布

我有与一个一对多的关系连接的两个领域 - 一个用户可能有许多联想。 我想查看属于该用户的所有关联。 我使用的脚手架插件。 所以,代码应该返回协会AssociationController的列表如下LILE这样的:

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)尽管我返回所有协会(对所有用户)中号使用PARAMS内此user.id。 A也试图重命名user.id只是user ,它也不能工作。 看起来这.LIST()应只用于排序或我做错了什么。 你能不能帮我这个好吗? 谢谢!

Answer 1:

澄清给出答案: list( params )返回所有结果域对象,并且只接受排序(按顺序),并查看端口(限制/偏移)参数。 它不提供任何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
}


Answer 2:

据Grails的文档 ,列表不会采取id作为参数。

看到你的最大,这将是Association.list(max: max)和你想要的东西,它是这样的:

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

params.id包含id想要的用户(或params['user.id']

更多关于findAllBy ...



Answer 3:

不知道以前的响应,但是:

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

您可以添加PARAMS如果使用分页列出调用。

另一种解决方案:

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

但是,你必须命名PARAM“ID”这主要取决于你如何设计你的域对象,在这里什么是你的目标。



文章来源: grails domain class .list() method with params