所以我正在为一个学习目的而从事一个项目。我收到以下错误。
Unhandled rejection SequelizeDatabaseError: SQLITE_ERROR: unrecognized token: "@"
at Query.formatError (/mnt/c/Users/Mike/websites/Treehouse-FSJS-Project-10/node_modules/sequelize/lib/dialects/sqlite/query.js:423:16)
at afterExecute (/mnt/c/Users/Mike/websites/Treehouse-FSJS-Project-10/node_modules/sequelize/lib/dialects/sqlite/query.js:119:32)
at replacement (/mnt/c/Users/Mike/websites/Treehouse-FSJS-Project-10/node_modules/sqlite3/lib/trace.js:19:31)
at Statement.errBack (/mnt/c/Users/Mike/websites/Treehouse-FSJS-Project-10/node_modules/sqlite3/lib/sqlite3.js:16:21)
下面是我的查询代码。
router.get('/book_detail/:id', (req, res, next) => {
books
.findAll({
where: {
id: req.params.id,
},
include: [
{
model: loans,
},
],
})
.then(book => {
const patronList = []
const loans = []
book[0].dataValues.loans.map(patrons => {
patronList.push(patrons.dataValues.patron_id)
loans.push(patrons.dataValues)
console.log(loans)
})
patrons
.findAll({
where: {
id: {
[Op.contains]: patronList,
},
},
})
.then(patron => {
// console.log(patronList)
console.log(patron)
res.render('book_detail', { book, loans })
})
})
})
我应该能够看到检查过这本书的顾客。如您在下面的查询中看到的,我得到了正确的ID。
Executing (default): SELECT `id`, `first_name`, `last_name`, `address`, `email`, `library_id`, `zip_code` FROM `patrons` AS `patrons` WHERE `patrons`.`id` @> 1, 3;
这似乎与 Op.contains 有关,但我想我不明白为什么这不能正常工作。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以更改以下查询:
where: {
id: {
[Op.contains]: patronList,
},
},
收件人
where: {
id: patronList
},
在这里看不到contains
的任何使用,
[操作数包含]:[1,2] // @> [1,2](PG数组包含运算符)
您可以将其用于json数组类型的字段,但在您的情况下 像表的主键。