如何解决与findOne一对多关系仅返回单个关系记录
我有两个模型:
- PostingTask
- PostingFlowQueue
它们看起来像这样
PostingTask:
import pkg from 'sequelize'
import connection from '../db/connection.js'
import jobStatus from '../common/jobStatus.js'
const {Model,DataTypes} = pkg
export default class PostingTask extends Model { }
PostingTask.init({
ID: {
type: DataTypes.INTEGER,autoIncrement: true,primaryKey: true
},PostingID: DataTypes.INTEGER,Status: {
type: DataTypes.STRING,allowNull: false,defaultValue: jobStatus.awaiting
},FromState: DataTypes.INTEGER,ToState: DataTypes.INTEGER,createdAt: {
type: DataTypes.DATE,field: 'CreatedAt'
},updatedAt: {
type: DataTypes.DATE,field: 'UpdatedAt'
},},{
freezeTableName: true,sequelize: connection.sequelize,modelName: 'PostingTask'
})
PostingFlowQueue:
import pkg from 'sequelize'
const {Model,DataTypes} = pkg
import connection from '../db/connection.js'
import jobStatus from '../common/jobStatus.js'
export default class PostingFlowQueue extends Model { }
PostingFlowQueue.init({
ID: {
type: DataTypes.INTEGER,autoIncrement: true
},PostingTaskID: {
type: DataTypes.INTEGER,ByChange: {
type: DataTypes.STRING,allowNull: false
},TargetPath: {
type: DataTypes.STRING,DataForChange: DataTypes.STRING,ErrorMessage: {
type: DataTypes.STRING,allowNull: true
},modelName: 'PostingFlowQueue'
})
与该模型的关系 index.js
import PostingTask from './postingtask.mjs'
import PostingFlowQueue from './postingflowqueue.mjs'
PostingTask.hasMany(PostingFlowQueue,{
foreignKey: 'PostingTaskID',as: 'Queue'
});
PostingFlowQueue.belongsTo(PostingTask,{
foreignKey: 'ID'
})
export {PostingTask,PostingFlowQueue}
我要解决的问题:
我需要从PostingTask获取所有关系记录
我该怎么做:
import {PostingFlowQueue,PostingTask} from '../models/index.mjs'
import jobStatus from '../common/jobStatus.js'
async function init() {
await PostingTask.findOne({
where: {Status: jobStatus.awaiting},include: [{all: true,attributes: ['ByChange']}]
}).then(task => {
console.log(task.Queue)
})
}
init()
问题: 仅返回一个关系记录
请告诉我我哪里可能出错。
我确实做了很多尝试,但是我无法理解我的错误。
解决方法
您的主键和外键似乎不存在。 ID不应该是PostingFlowQueue的主键吗? 关系的外键始终引用同一字段。 所以应该是
PostingTask.hasMany(PostingFlowQueue,{
foreignKey: 'PostingTaskID',as: 'Queue'
});
PostingFlowQueue.belongsTo(PostingTask,{
foreignKey: 'PostingTaskID'
})
您是否尝试过使用findAll进行相同的查询或查看生成的查询?
,我找到解决办法!很奇怪,但仍然...
async function init() {
await PostingTask.findOne({
where: {Status: jobStatus.awaiting},include: [{
model: postingflowqueue,attributes:['ID','Status']
}],}).then(task => {
//task.update({Status: jobStatus.processing})
task.getPostingFlowQueues().then(async steps => {
console.log(step)
})
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。