目前我的控制器列出域对象产品的方法是:
def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[productInstanceList: Product.list(params), productInstanceTotal: Product.count()]
}
我希望为此添加更多约束。更具体地说,我想获得登录用户。它与名为Manager的域实体具有M:1关系。经理与域实体公司有M:M关系。公司与产品有1:M的关系。所以我想只返回来自相应公司的产品。
我开始做:
def list(Integer max) {
// 1. Get logged in user.
def user = springSecurityService.currentUser;
// 2. Get corresponding manager.
Manager mgr = user.getManager();
// 3. Get corresponding companies
companies = mgr.getCompanies();
// 4. Get products for all companies - not sure smart way to get this.
// 5. Need to add the products to the query
...
}
可以看出,我陷入了第4步,第5步。使用原始SQL我只想加入一个代表所有用户经理的公司产品,然后将其作为where
谓词并点击产品表。
但我想要一个grails / groovy解决方案。我还需要在查询中保留params
,因为此控制器也可以注入params
并传入查询,
任何提示?
答案 0 :(得分:1)
您可以使用createCriteria获取所有产品,例如
def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
def user = springSecurityService.currentUser;
Manager mgr = user.getManager();
companies = mgr.getCompanies();
def productList = Product.createCriteria().list(params) {
'in'("companies", companies)
}
[productInstanceList: productList, productInstanceTotal: productList.totalCount]
}