Sequelize - 排序和排除
Sequelize - order and exclude
我有一个 table 项目带有两个 table 的外键,我尝试使用顺序、限制、排除和包含来执行 FindAll,如下所示:
Items.findAll({
order: [['creationDate', 'DESC']],
limit: 10,
include: [
{
model: Artists,
required: false,
attributes: ['id', 'name',]
},
{
model: Albums,
required: false,
},
],
attributes: { exclude: ['creationDate'] }
})
但是我得到一个错误:
DatabaseError [SequelizeDatabaseError]: (conn = 837, no: 1054, SQLState: 42S22) Unknown column 'Items.creationDate' in 'order clause'
如果我删除这一行:
attributes: { exclude: ['creationDate'] }
错误消失。
我应该怎么做才能启用具有所需属性的查询?
提前致谢
findAll
和 include
尝试合并来自多个表的数据。在 SQL 中,Subqueries 和 JOIN 都实现了这个用例。但是,数据的组合方式与您在此处看到的内容略有不同。默认情况下,Sequelize 为 findAll
+ include
和 subQuery
生成子查询 params 是告诉 Sequelize 使用子查询(true
)或 JOIN(false
)。
返回续集,
subQuery: true
(默认)
这将生成 SQL 如下所示
SELECT ...
FROM (SELECT ...(attributes except creationDate) FROM `Items` ...)
LEFT OUTER JOIN `Artists` ...
...
ORDER BY `Items`.`creationDate` DESC
LIMIT 10;
这个 SQL 不起作用,因为首先执行嵌套子查询并且子查询不包括 creationDate
并且当执行 main SQL with ORDER
时,creationDate
不存在。
然后如果你关闭子查询。
subQuery: false
这将生成 SQL 如下所示
SELECT ... (Artist's, Album's attributes and Item's attributes except creationDate)
FROM `Items`
LEFT OUTER JOIN `Artists` ...
...
ORDER BY `Items`.`creationDate` DESC
LIMIT 10;
这会起作用,因为当执行 ORDER
并且 exclude
发生在顶层时,这不会过滤属性。
我有一个 table 项目带有两个 table 的外键,我尝试使用顺序、限制、排除和包含来执行 FindAll,如下所示:
Items.findAll({
order: [['creationDate', 'DESC']],
limit: 10,
include: [
{
model: Artists,
required: false,
attributes: ['id', 'name',]
},
{
model: Albums,
required: false,
},
],
attributes: { exclude: ['creationDate'] }
})
但是我得到一个错误:
DatabaseError [SequelizeDatabaseError]: (conn = 837, no: 1054, SQLState: 42S22) Unknown column 'Items.creationDate' in 'order clause'
如果我删除这一行:
attributes: { exclude: ['creationDate'] }
错误消失。
我应该怎么做才能启用具有所需属性的查询?
提前致谢
findAll
和 include
尝试合并来自多个表的数据。在 SQL 中,Subqueries 和 JOIN 都实现了这个用例。但是,数据的组合方式与您在此处看到的内容略有不同。默认情况下,Sequelize 为 findAll
+ include
和 subQuery
生成子查询 params 是告诉 Sequelize 使用子查询(true
)或 JOIN(false
)。
返回续集,
subQuery: true
(默认)
这将生成 SQL 如下所示
SELECT ...
FROM (SELECT ...(attributes except creationDate) FROM `Items` ...)
LEFT OUTER JOIN `Artists` ...
...
ORDER BY `Items`.`creationDate` DESC
LIMIT 10;
这个 SQL 不起作用,因为首先执行嵌套子查询并且子查询不包括 creationDate
并且当执行 main SQL with ORDER
时,creationDate
不存在。
然后如果你关闭子查询。
subQuery: false
这将生成 SQL 如下所示
SELECT ... (Artist's, Album's attributes and Item's attributes except creationDate)
FROM `Items`
LEFT OUTER JOIN `Artists` ...
...
ORDER BY `Items`.`creationDate` DESC
LIMIT 10;
这会起作用,因为当执行 ORDER
并且 exclude
发生在顶层时,这不会过滤属性。