在续集中使用Op.contain查询时出错。

时间:2018-11-06 12:23:18

标签: sequelize.js

所以我正在为一个学习目的而从事一个项目。我收到以下错误。

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 有关,但我想我不明白为什么这不能正常工作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以更改以下查询:

where: {
    id: {
        [Op.contains]: patronList,
    },
},

收件人

where: {
    id: patronList
},

在这里看不到contains的任何使用,

  

[操作数包含]:[1,2] // @> [1,2](PG数组包含运算符)

     

您可以将其用于json数组类型的字段,但在您的情况下   像表的主键。