首页 > 解决方案 > 跳过未在源中传递的更新列

问题描述

列名的字符串或接口中是否有任何语法helpers.sets可以跳过数据源中不存在的属性的列?

现在,我需要 new helpers.Column({ name, skip: c => !c.exists }) 为每个可能的列创建 ColumnConfig。

有类似的东西会很好:

pgp.helpers.sets(values, SomeRepository.cs.update, skipNonExisting);

或者至少:

pgp.helpers.ColumnSet(['column1*', 'column2*']);

其中 * (或任何其他方便的符号)表示该列在源中是可选的并且它没有抛出"Property 'name' doesn't exist."

需要这个helpers.sets(不是update因为我有一些重要的更新 SQL)。

正如文档所述(http://vitaly-t.github.io/pg-promise/helpers.html#.sets),当未指定集合中的列参数时,将使用数据对象的属性。

在我需要对某些列进行特殊格式设置之前,这很好用,然后设置仅适用于 ColumnsSets 中定义的列(如果指定)。

标签: pg-promise

解决方案


在现代 JavaScript 中,您可以轻松地缩写事物,只需一行...

因此,要将列名列表转换为可选列列表:

const cndCols = arr => arr.map(name => ({name, skip: c => !c.exists}));

声明ColumnSet对象:

const cs = pgp.helpers.ColumnSet(cndCols(['column1', 'column2']));

它并不比问题中建议的解决方案复杂。

helpers.sets 需要这个(不是更新,因为我有一些重要的更新 SQL)。

为此,您创建并使用两个单独的ColumnSet对象。


推荐阅读