我正在尝试使用Sequelize ORM的特性,该特性允许从包含的模型中引用嵌套列(参见Sequelize Docs: Complex where clauses at the top-level)。在文档中,它声明,我可以使用$nested.column$
语法。
以下是我尝试做的事情:
let where = { memberId };
if (req.query.search) {
const like = { [Op.like]: `%${req.query.search}%` };
where = {
...where,
[Op.or]: [
{ '$bookItem.serial$': like },
{ '$bookItem.book.name$': like },
{ '$bookItem.book.ISBNCode$': like },
],
};
}
const options = {
where,
include: [
{
model: models.BookItem,
as: 'bookItem',
required: false,
include: [
{
model: models.Book,
as: 'book',
attributes,
required: false,
},
],
},
],
});
const transactions = await models.Borrow.findAll(options);
但是,对于上面的代码,我得到了以下错误:"Unknown column 'bookItem.serial' in 'where clause'"
我错过了什么?
完整数据库架构:https://dbdiagram.io/d/5e08b6aaedf08a25543f79cb
3条答案
按热度按时间eqzww0vc1#
bookitem
是表还是数据库?bookItem.serial
代表db.tbl
或tbl.column
bookItem.book.name
只能表示db.tbl.column
由于
bookItem
似乎是数据库名,因此serial
必须是表名。此时,“tablename LIKE ...”是语法错误。vshtjzan2#
在您的链接文档书籍中没有名称列,请将
$bookItem.book.name$
更改为$bookItem.book.title$
,并尝试在required: false
下面添加right: true
以创建内部联接。r3i60tvu3#
我已经更正了这个错误。最初,我编写这个查询
但现在我 * 重新排列了查询,它工作 *
查询错误
最终工作查询