0

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

def list(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    [productInstanceList: Product.list(params), productInstanceTotal: Product.count()]
}

我希望为此添加更多约束。更具体地说,我想获取登录用户。这与称为 Manager 的域实体具有 M:1 关系。Manager 与域实体 Company 具有 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注入哪些传递到查询中,

有小费吗?

4

1 回答 1

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]
}
于 2013-09-01T06:24:25.477 回答