我有一些相互关联的模型,我需要在某个请求中将它们全部获取。我基本上需要在所有部分上使用limit
,order
和attributes
,但是这导致嵌套的include变得异常,我不完全确定这是怎么回事
它并没有真正打印出任何错误或任何东西,或者只是不将模型包含在响应中(即它们为空。),或者包括了它们,但是诸如订单/限制之类的东西被忽略了。
我已经尝试使用subQuery
,separate
等...这些都不起作用。
相关查询;
const categories = await models.Category.findAll({
attributes: ['id', 'title', 'description'],
order: [['title', 'ASC']],
include: [
{
model: models.Product,
attributes: ['id', 'title'],
through: { attributes: [] },
include: [
{
model: models.Price,
attributes: ['id', 'amount', 'createdAt'],
order: [['createdAt', 'DESC']],
limit: 1,
},
],
},
],
});
关联;
models.Category.belongsToMany(models.Product);
models.Product.belongsToMany(models.Category);
models.Product.hasMany(models.Price);
models.Price.belongsTo(models.Product);
理想情况下,我希望上面提供的查询返回;
Category
,其升序基于title
。Product
位于Category
内,具有属性id
和title
。Price
内部的Product
,具有属性id
,amount
和createdAt
,基于createdAt
的降序,以及限制为1。答案 0 :(得分:0)
为了使查询按Product.Price.createdAt
进行排序,请将[models.Product, models.Price, 'createdAt', 'DESC']
添加到order
。就限制而言:为了限制包含的模型,您需要将其作为单独的查询运行,因此请将separate: true
添加到包含中。
代码:
const categories = await models.Category.findAll({
attributes: ['id', 'title', 'description'],
order: [['title', 'ASC'], [models.Product, models.Price, 'createdAt', 'DESC']],
include: [
{
model: models.Product,
attributes: ['id', 'title'],
through: { attributes: [] },
include: [
{
model: models.Price,
attributes: ['id', 'amount', 'createdAt'],
separate: true,
limit: 1,
},
],
},
],
});