向控制器列表方法添加更多约束

时间:2013-08-31 22:54:34

标签: grails

目前我的控制器列出域对象产品的方法是:

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并传入查询,

任何提示?

1 个答案:

答案 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]
}