gpt4 book ai didi

node.js - Sequelize 关联 : query the last createdAt association from many to many association

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:35 26 4
gpt4 key购买 nike

假设这个模式:

var user = sequelize.define('user', {
username: Sequelize.STRING,
email: Sequelize.STRING,
password: Sequelize.STRING
}, {
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at'
});

var status = sequelize.define('status', {
status: Sequelize.STRING,
description: Sequelize.TEXT
}, {
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at'
});

var users_statuses = sequelize.define('users_statuses', {
user_id: Sequelize.INTEGER(11),
status_id: Sequelize.INTEGER(11),
}, {
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at'
});

user.hasMany(status, { foreignKey: 'user_id', through: models.users_statuses });
status.hasMany(user, { foreignKey: 'status_id', through: models.users_statuses });

因此每个用户都有许多状态(以跟踪所有选定的状态)。使用 find 和 include 或 getter user.getStatuses() 我可以获取实际用户的所有状态,但我无法弄清楚如何获取最后/当前的关联状态(基于 users_statuses 表/模型的created_at 列)

有什么想法吗?

最佳答案

使用 1 个数据库查询进行快速修复。使用

user.find({
where: {user_id : id },
include: [{
model: status,
attributes: ['status']
}],
order: [ [ status, 'createdAt', 'DESC'] ]
}).then(function(user) {
var latestStatus = user.status[0];
}).catch(function(err) {
console.log(err);
});

但这会浪费时间来获取您不需要的所有状态。如果您有很多状态,Sequelize 可能会比执行其他查询浪费更多时间来截断结果。

更好的方法是在 user_status 表中搜索最新的 createdAt 状态,并对 status 表执行另一个查询:

user_status.find({
where: {user_id: yourid}
order: [ 'createdAt', 'DESC']
}).then(function(user_status) {
var latest_status_id = user_status.status_id;
return status.find(where:{status_id: latest_status_id});
}).then..... catch....;

当然有最好的办法。但这需要您将表与其交叉表关联起来,并且不能让sequelize 使用“through”来执行此操作。

如果您的 user_status 是强实体,并且它具有以下关系:

user_status.belongsTo(status, {foreignKey: status_id});

然后你可以这样做:

user_status.find({
where: {user_id: id},
include: [{
model: status
}],
order: [ [ 'createdAt', 'DESC' ] ]
}).then....

基本思想是“包含”只能用于强实体。当您使用 hasMany... through... 时,交叉表是一个弱实体,无法“包含”。

关于node.js - Sequelize 关联 : query the last createdAt association from many to many association,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26785823/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com