我遇到了这个问题而且我已经没时间了,所以如果有人可以提供帮助请 我想插入这些数据:
const data= {
id:user.id,
choice:'SWOT',
label:['Strengths','Weaknesses','Opportunities','Threats'],
results:[45,5,20,30],
description:'My first Strategic Analysis'}
进入此表:
analyses (
id serial primary key,
userID integer not null,
choice varchar(25) not null,
Label text ARRAY,
Results integer ARRAY,
description varchar(200),
FOREIGN KEY (userID) REFERENCES users (id)
);
使用knex,这应该像:
db('analyses').insert({
userid: data.id,
choice: data.choice,
Label: data.labelG,
Results: data.resultG,
description: data.description
})
由于这种语法对ARRAY类型不起作用,我想知道该怎么做? 有些人建议使用knex.raw()但是我没有得到正确的语法 有帮助吗?
答案 0 :(得分:3)
您可以直接将javascript数组传递到ARRAY
类型的列。像这样:
await knex.schema.createTable('foo', t => {
t.increments('id');
t.specificType('intarray', 'integer ARRAY');
t.specificType('stringarray', 'text ARRAY');
});
await knex('foo').insert({ intarray: [4,3,2,1], stringarray: ['foo','bar'] });
const rows = await knex('foo');
console.log(rows);
// should output:
// [ anonymous { id: 1, intarray: [ 4,3,2,1 ], stringarray: [ 'foo', 'bar' ] } ]
答案 1 :(得分:0)
对于Postgresql的文本数组,您需要存储数据,如:
{'Strengths','Weaknesses','Opportunities','Threats'}
为此,您可以创建一个函数将其转换为常用。
db('analyses').insert({
userid: data.id,
choice: data.choice,
Label: '{"' + data.labelG.join('","') + '"}',
Results: data.resultG,
description: data.description
})
此外,您还需要在获取它们时进行转换。