使用带pg-promise的命名参数时,是否可以引用嵌套对象,如下例所示?
var obj = {
name: 'John',
address: {
postcode: 'abc'
}
};
db.query('SELECT * FROM users WHERE postcode=${address.postcode} AND name=${name}', obj);
目前,使用该值未解析对嵌套对象的引用,例如${address.postcode}
保留原样,不会被查询字符串中的'abc'
替换。
答案 0 :(得分:2)
注意:此答案不再有效v6.10.0 pg-promise,Nested Named Parameters开始本地支持pg-promise。
问题中提供的代码示例将按原样运行。
仅适用于v6.10.0之前的http://example.com/Subscriptions/create?defaultValues=
图书馆只格式化命名参数,它不会对它们进行评估,因此不会,你不能这样做,至少不是那样直接。
但您可以通过函数使查询格式化引擎可以使用子属性:
var obj = {
name: 'John',
address: {
postcode: 'abc'
},
addrCode: a => a.address.postcode // alias for accessing a sub-property
};
然后使用WHERE postcode = ${addrCode}
。
通过this
的旧/ ES5语法也适用:
var obj = {
name: 'John',
address: {
postcode: 'abc'
},
addrCode: function(/*a*/) {
// a = this (can use both)
return this.address.postcode;
}
};
<强>更新强>
可以使客户端评估工作,但只能使用$1, $2, ...
参数:
db.query('... postcode = $1 AND name = $2', [obj.name, obj.address.postcode]);
注意:您不能在查询字符串中直接使用${obj.address.postcode}
等评估,因为该值不会被正确转义。