【问题标题】:Query associated domain object with params gives error: Cannot query property "params" - no such property on class使用参数查询关联的域对象给出错误:无法查询属性“参数” - 类上没有这样的属性
【发布时间】:2014-06-03 22:32:05
【问题描述】:

我有两个域对象: 户主和地址,

在 HeadOfHousehold 我有以下关系:

Address currentAddress
Address previousAddress

在我的地址中:

static belongsTo = [headOfHousehold: HeadOfHousehold]

我有以下疑问:

def customers = HeadOfHousehold.findAll {
            if(params.lastName){
                lastName =~ params.lastName+ "%"
            }
            if(params.firstName){
                firstName =~ params.firstName + "%"
            }
            if(params.middleName){
                middleName =~ params.middleName + "%"
            }
            if(params.city){
                currentAddress.city =~ params.city+ "%"
            }
            if(params.zipCode){
                currentAddress.zipCode == params.zipCode
            }
            if(params.extendedZipCode){
                currentAddress.extendedZipCode == params.extendedZipCode
            }

        }

问题在于我得到错误的最后三个语句:

Cannot query property "params" - no such property on class HeadOfHousehold

当我进入地址时,它不会抱怨与 lastName firstName 或 middleName 相关的查询。我可以通过将参数保存在字符串中并以这种方式解决它:

String city = params.city + "%"
        String zipCode = params.zipCode
        String extendedZipCode = params.extendedZipCode
        String state = params.state
        def customers = HeadOfHousehold.findAll {
            if(params.lastName){
                lastName =~ params.lastName+ "%"
            }
            if(params.firstName){
                firstName =~ params.firstName + "%"
            }
            if(params.middleName){
                middleName =~ params.middleName + "%"
            }
            if(params.city){
                currentAddress.city =~ city 
            }
            if(params.state){
                currentAddress.state == state
            }
            if(params.zipCode){
                currentAddress.zipCode == zipCode
            }
            if(params.extendedZipCode){
                currentAddress.extendedZipCode == extendedZipCode
            }

        }

为什么有必要这样做?我究竟做错了什么? (使用 grails 2.3.8 版)

【问题讨论】:

  • 哪个版本的 Grails?
  • 2.3.8 我正在使用 GGTS 来编辑我的文件,但使用单独的控制台来运行等。因为 GGTS 不是很好。

标签: grails grails-orm


【解决方案1】:

尝试匹配关联或属性的属性时,它会将params 视为父类上的属性。我不完全确定这是否是预期的行为。我会进一步研究。

但是与. 操作相比,您可以通过使用您所做的方式或仅使用闭包方法(DSL 方式)很好地克服这个问题。例如:

if(params.city){
    currentAddress { city =~ params.city+ "%" }
}
if(params.zipCode){
    currentAddress { zipCode == params.zipCode } 
}
if(params.extendedZipCode){
    currentAddress { extendedZipCode == params.extendedZipCode }
}

【讨论】:

  • 我更喜欢这种技术,更干净,但是你能解释一下它是如何工作的吗?一般来说,我对数据库操作还很陌生,并且仍然习惯了这一切。我一直在搜索有关查询的 grails 手册,但不记得看到过这样的内容。如果您不介意,我非常希望您能解释一下语法,或许还可以提供一个链接以供进一步阅读?
  • 通过this section主要是“查询关联”,你会很容易得到。在您的情况下,它是一个以相同方式工作的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2015-10-13
相关资源
最近更新 更多