【发布时间】:2013-04-11 11:23:02
【问题描述】:
在我的任务管理应用程序中,用户应该能够根据:assignedTo、priority、status 和/或dueDate 过滤任务
我不确定如何创建动态查询,因为它将根据可用参数构建查询。
例如:
如果我有一个 URL,例如:task/index?assignedTo=1&status=2
我可以仅基于这两个参数构建查询。我习惯的方法是
Task.findAllByAssignedToAndStatus(
User.get(params.assignedTo),
TaskStatus.get(params.status)
)
我显然不想通过为每个可能的 URL 参数组合写出每个 findAllBy 查询来实现 DRY 方法。
在 grails 中有没有好的方法来做到这一点?
【问题讨论】:
-
通过
"findAllBy${params.collect { k, v -> k.capitalize() }.join( 'And' )}"之类的操作来生成查找器名称很简单,但它怎么知道assignedTo应该加载User实例而status应该引用TaskStatus? -
同意,我不想这样做。这是一篇论文,所以我希望代码尽可能干净。
-
我可以建议一个命名查询 - grails.org/doc/2.2.1/ref/Domain%20Classes/namedQueries.html - 然后您可以按用户和状态过滤掉。我认为他们摇滚!
标签: grails groovy grails-orm