Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何正确设置自定义';通过';续集中的表格?_Mysql_Node.js_Sequelize.js_Associations - Fatal编程技术网

Mysql 如何正确设置自定义';通过';续集中的表格?

Mysql 如何正确设置自定义';通过';续集中的表格?,mysql,node.js,sequelize.js,associations,Mysql,Node.js,Sequelize.js,Associations,我正试图在一个使用Sequelize的项目中设置一个自定义的直通表。我有一张计划表和一张任务表。现在,我希望实现一个与这两者相关的表,但我想添加一个自定义列“done”。运行sync()时,似乎所有表都已正确设置。这是它运行以设置PlanningTask表的查询: CREATE TABLE IF NOT EXISTS `PlanningTask` (`done` TINYINT(1) NOT NULL, `PlanningId` INTEGER(11) , `TaskId` INTEGER(1

我正试图在一个使用Sequelize的项目中设置一个自定义的直通表。我有一张计划表和一张任务表。现在,我希望实现一个与这两者相关的表,但我想添加一个自定义列“done”。运行
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

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

我想知道订单是否有问题(关联在订单计划、计划任务、任务中注册),但当我更改订单时,它仍然不起作用。该表创建正确,但当我尝试使用planning.add([Task])输入任务时,它会运行以下查询:

SELECT `done`, `PlanningId`, `TaskId`
FROM `PlanningTask` AS `PlanningTask`
WHERE `PlanningTask`.`PlanningId` = 1 AND `PlanningTask`.`TaskId` IN (1);
因此,对于PlanningId,它尝试使用“=1”,这是正确的,但是对于TaskId,它使用了“IN(1)”,这是不正确的。在本例中,1是正确的任务Id


在关联中是否有我做错了什么,或者我输入任务的方式是否有问题?

我的错误。“done”列仍然被设置为required,在我的测试中,我没有为它发送值,其余的工作正常

SELECT `done`, `PlanningId`, `TaskId`
FROM `PlanningTask` AS `PlanningTask`
WHERE `PlanningTask`.`PlanningId` = 1 AND `PlanningTask`.`TaskId` IN (1);