Я пытаюсь настроить пользовательскую сквозную таблицу в проекте, который использует Sequelize.У меня есть таблица планировок и таблица задач.Теперь я хочу реализовать таблицу, которая связывает их, но я хочу добавить пользовательский столбец «готово».При запуске sync()
кажется, что все таблицы настроены правильно.Это запрос, который выполняется для настройки таблицы PlanningTask:
CREATE TABLE IF NOT EXISTS `PlanningTask`
(`done` TINYINT(1) NOT NULL, `PlanningId` INTEGER(11) , `TaskId` INTEGER(11) ,
PRIMARY KEY (`PlanningId`, `TaskId`),
FOREIGN KEY (`PlanningId`) REFERENCES `Plannings` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`TaskId`) REFERENCES `Tasks` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
ENGINE=InnoDB;
Вот текущие модели: task.js
module.exports = (sequelize, DataTypes) => {
const Task = sequelize.define('Task', {
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
autoIncrement: true,
primaryKey: true
},
type: {
type: DataTypes.STRING,
allowNull: false
},
description: {
type: DataTypes.STRING,
allowNull: false
},
})
Task.associate = function(models) {
Task.belongsToMany(models.Planning, {
through: 'PlanningTask'
})
}
// Methods
return Task
}
planning.js
module.exports = (sequelize, DataTypes) => {
const Planning = sequelize.define('Planning', {
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
autoIncrement: true,
primaryKey: true
},
title: {
type: DataTypes.STRING,
allowNull: false
}
})
Planning.associate = function (models) {
Planning.belongsTo(models.User, {
foreignKey: 'owner'
})
Planning.belongsToMany(models.Task, {
through: 'PlanningTask'
})
}
// Methods
return Planning
}
planningtask.js
module.exports = (sequelize, DataTypes) => {
const PlanningTask = sequelize.define('PlanningTask', {
done: {
type: DataTypes.BOOLEAN,
allowNull: false
}
}, {
timestamps: false,
freezeTableName: true
})
PlanningTask.associate = function (models) {
PlanningTask.belongsTo(models.Planning)
PlanningTask.belongsTo(models.Task)
}
// Methods
return PlanningTask
}
Все модели загружаются со следующим файлом index.js:
const fs = require('fs')
const path = require('path')
const Sequelize = require('sequelize')
const config = require('../config/config')
const db = {}
const sequelize = new Sequelize(
config.db.database,
config.db.user,
config.db.password,
config.db.options
)
fs
.readdirSync(__dirname)
.filter((file) =>
file !== 'index.js'
)
.forEach((file) => {
const model = sequelize.import(path.join(__dirname, file))
db[model.name] = model
})
Object.keys(db).forEach(function (modelName) {
if ('associate' in db[modelName]) {
db[modelName].associate(db)
}
})
db.sequelize = sequelize
db.Sequelize = Sequelize
module.exports = db
Мне было интересно, могут ли быть какие-то проблемы с заказом (ассоциации связаны сзарегистрирован в порядке планирования (PlanningTask, Task), но когда я меняю заказ, он все равно не работает.Таблица создана правильно, но когда я пытаюсь ввести Задачу, используя Planning.add ([задача]), она запускает следующий запрос:
SELECT `done`, `PlanningId`, `TaskId`
FROM `PlanningTask` AS `PlanningTask`
WHERE `PlanningTask`.`PlanningId` = 1 AND `PlanningTask`.`TaskId` IN (1);
Итак, для PlanningId она пытается «= 1»это правильно, но тогда для TaskId он использует IN (1), что не правильно.1 в этом случае правильный идентификатор задачи.
Есть ли что-то, что я делаю неправильно в ассоциациях, или есть проблема в способе ввода задач?