pg-promise,使用带有嵌套对象的命名参数
pg-promise, using named parameters with nested objects
在 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'
。
注意: 这个答案不再有效,因为 v6.10.0 of pg-promise, which started supporting Nested Named Parameters 本机。
问题中提供的代码示例将按原样运行。
仅限pg-promise prior to v6.10.0
库只格式化命名参数,它不评估它们,因此不,你不能这样做,至少不能直接那样做。
但是您可以通过函数使子属性对查询格式化引擎可用:
var obj = {
name: 'John',
address: {
postcode: 'abc'
},
addrCode: a => a.address.postcode // alias for accessing a sub-property
};
然后使用WHERE postcode = ${addrCode}
.
旧的 / ES5 语法,通过 this
也可以工作:
var obj = {
name: 'John',
address: {
postcode: 'abc'
},
addrCode: function(/*a*/) {
// a = this (can use both)
return this.address.postcode;
}
};
更新
可以使客户端评估工作,但只能使用 , , ...
个参数:
db.query('... postcode = AND name = ', [obj.name, obj.address.postcode]);
注意:您不能直接在查询字符串中使用 ${obj.address.postcode}
之类的评估,因为该值不会被正确转义。
在 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'
。
注意: 这个答案不再有效,因为 v6.10.0 of pg-promise, which started supporting Nested Named Parameters 本机。
问题中提供的代码示例将按原样运行。
仅限pg-promise prior to v6.10.0
库只格式化命名参数,它不评估它们,因此不,你不能这样做,至少不能直接那样做。
但是您可以通过函数使子属性对查询格式化引擎可用:
var obj = {
name: 'John',
address: {
postcode: 'abc'
},
addrCode: a => a.address.postcode // alias for accessing a sub-property
};
然后使用WHERE postcode = ${addrCode}
.
旧的 / ES5 语法,通过 this
也可以工作:
var obj = {
name: 'John',
address: {
postcode: 'abc'
},
addrCode: function(/*a*/) {
// a = this (can use both)
return this.address.postcode;
}
};
更新
可以使客户端评估工作,但只能使用 , , ...
个参数:
db.query('... postcode = AND name = ', [obj.name, obj.address.postcode]);
注意:您不能直接在查询字符串中使用 ${obj.address.postcode}
之类的评估,因为该值不会被正确转义。