【问题标题】:pg-promise format default - not existing Property to nullpg-promise 格式默认 - 不存在的属性为 null
【发布时间】:2017-12-31 07:06:12
【问题描述】:

我希望能够让formatting.formatValue 函数将undefined 转换为null。

但是似乎没有一种方法可以从给 pg-promise 的 initOptions 中设置默认函数,因为 pgFormatting 是一个布尔值,格式值希望它作为参数。但是该库似乎没有将其传递给普通查询。

vitaly-t 写道

但我不确定它会增加多少价值,因为您无法访问查询方法中的格式化选项。

这是真的。但我只是想为所有格式化为查询的缺失值设置一个默认值 null 。部分不重要我不用?

使用 coalesce 在某些查询中具有“可选”值,默认不设置变量。

例子:

UPDATE sometable SET value = COALESCE(${value}, value)

如何停止收到“属性不存在”错误?

我认为我需要一种方法将值传递给此选项,以便对格式的所有调用。

if ('default' in options) {
    const d = options.default, value = typeof d === 'function' ? d.call(obj, v.name, obj) : d;
    return formatValue(value, v.fm, obj);
}

导致创建 options.default 的相关问题。 https://github.com/vitaly-t/pg-promise/issues/173

我无法覆盖格式值函数,因为它是作为不可配置的只读属性添加的。

我是否只需要咬紧牙关,将变量作为 null 放在我希望它们是可选的任何地方...

【问题讨论】:

    标签: javascript pg-promise


    【解决方案1】:

    我只是想为所有被格式化为查询的缺失值设置默认值null...

    这是你的格式化函数,如果你想手动格式化查询:

    function format(query, values) {
        return pgp.as.format(query, values, {'default': null});
    }
    

    对于在helpers 命名空间内自动生成的查询,您将根据Column API 提供属性def 的值。

    除此之外,查询方法自己使用format 函数,所以你不能覆盖它,你也不应该,通常不需要它,如果你正确使用库的API,即如果您可以给我一个您认为需要它的具体示例,那么我可以建议您避免它的更好方法。

    另一种方法 - 方法 helpers.concat 可以使用格式化选项,因为它实现了连接查询的特定情况。

    【讨论】:

    • 该用例用于查询参数可能设置或不设置值的位置。设置值将按原样更新但非设置值应传递 null 以使用该记录中的当前值,因为使用了 COALESCE(${value}, value)将其设置为一个选项,以便这些查询方法可以具有默认未找到为空的行为。为什么您认为这通常不需要?对我来说,查询方法似乎缺少一些可以用格式方法完成的东西。两次调用 format 方法会很奇怪。
    • @LiamMitchell 实际上,只有在 INSERT 和 UPDATE 操作期间才能丢失属性,您在 helpers 命名空间中有方法。在所有其他情况下,它并不是真正需要的。
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2021-06-16
    • 2020-04-09
    • 1970-01-01
    • 2012-12-15
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多