如何在 BookshelfJS 的查询中使用 ID?
How to use ID in Query in BookshelfJS?
我有一个字段,它有 逗号分隔的 ID,所以我想从所选的 ID 中查找,这是我的代码,
.get(function(req, res) {
knex.select('*')
.from('exam')
.whereRaw('? = any(regexp_split_to_array(student_id))', [req.params.id])
.then(function(rows) {
//return res.send(rows);
console.log(rows);
})
.catch(function(error) {
console.log(error)
});
});
===> 当我使用 KNEX 它会给出这样的错误,
{ error: function regexp_split_to_array(text) does not exist
name: 'error',
length: 220,
severity: 'ERROR',
code: '42883',
detail: undefined,
hint: 'No function matches the given name and argument types. You might need to add explicit type casts.',
position: '37',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'parse_func.c',
line: '523',
routine: 'ParseFuncOrColumn'
}
- 在student_id列我有这样的ID,33,34,35,36
- 在 req.params.id 我只有一个 ID,比如 35.
- 所以我想要包含 35 个 ID 的 行,相同 Table.
===> 所以我只想要两行 (2,3) 因为它包含 ID = 35.
假设您使用的是 PostgreSQL 数据库(我在屏幕截图上看到您使用的是 phpPgAdmin)。您可以使用 regexp_split_to_array 函数将字符串转换为数组(显然 :)。并使用 any.
对结果数组执行搜索
在SQL个字里,可以这样写
select '35' = any(regexp_split_to_array('33,34,35,36', E','));
在您的查询中,您可以将 .where
替换为
.whereRaw("? = any(regexp_split_to_array(student_id, E','))", [req.params.id])
但请记住,这可以是 performance-heavy 请求,对于您执行字符串拆分操作的每一行。一种更好的方法(假设您的项目有必要在一行中包含数组值)是将 student_id
存储在 Array 类型中并添加 gin index on student_id
column and perform search operations like this
select * from table where student_id @> '{35}';
我有一个字段,它有 逗号分隔的 ID,所以我想从所选的 ID 中查找,这是我的代码,
.get(function(req, res) {
knex.select('*')
.from('exam')
.whereRaw('? = any(regexp_split_to_array(student_id))', [req.params.id])
.then(function(rows) {
//return res.send(rows);
console.log(rows);
})
.catch(function(error) {
console.log(error)
});
});
===> 当我使用 KNEX 它会给出这样的错误,
{ error: function regexp_split_to_array(text) does not exist
name: 'error',
length: 220,
severity: 'ERROR',
code: '42883',
detail: undefined,
hint: 'No function matches the given name and argument types. You might need to add explicit type casts.',
position: '37',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'parse_func.c',
line: '523',
routine: 'ParseFuncOrColumn'
}
- 在student_id列我有这样的ID,33,34,35,36
- 在 req.params.id 我只有一个 ID,比如 35.
- 所以我想要包含 35 个 ID 的 行,相同 Table.
===> 所以我只想要两行 (2,3) 因为它包含 ID = 35.
假设您使用的是 PostgreSQL 数据库(我在屏幕截图上看到您使用的是 phpPgAdmin)。您可以使用 regexp_split_to_array 函数将字符串转换为数组(显然 :)。并使用 any.
对结果数组执行搜索在SQL个字里,可以这样写
select '35' = any(regexp_split_to_array('33,34,35,36', E','));
在您的查询中,您可以将 .where
替换为
.whereRaw("? = any(regexp_split_to_array(student_id, E','))", [req.params.id])
但请记住,这可以是 performance-heavy 请求,对于您执行字符串拆分操作的每一行。一种更好的方法(假设您的项目有必要在一行中包含数组值)是将 student_id
存储在 Array 类型中并添加 gin index on student_id
column and perform search operations like this
select * from table where student_id @> '{35}';