[英]Sequelize using postgres dialect add double column
我想在parents
表和children
表之間建立關系,這就是我的做法
// 20210226075430-create-child.js (children migration file)
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable("Children", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER,
},
name: {
type: Sequelize.STRING,
},
age: {
type: Sequelize.STRING,
},
parentId: {
type: Sequelize.INTEGER,
allowNull: false,
onDelete: "CASCADE",
references: {
model: "Parents",
key: "id",
},
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable("Children");
},
};
// parent migration file
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable("Parents", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER,
},
name: {
type: Sequelize.STRING,
},
age: {
type: Sequelize.STRING,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable("Parents");
},
};
// child.js / children model
"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class Child extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
Child.belongsTo(models.Parent, { foreignKey: "parentId" });
}
}
Child.init(
{
name: DataTypes.STRING,
age: DataTypes.STRING,
parentId: DataTypes.INTEGER,
},
{
sequelize,
modelName: "Child",
}
);
return Child;
};
// parent model
"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
class Parent extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
Parent.hasMany(models.Child);
}
}
Parent.init(
{
name: DataTypes.STRING,
age: DataTypes.STRING,
},
{
sequelize,
modelName: "Parent",
}
);
return Parent;
};
此代碼在 mysql 中非常好,但是當我將方言更改為 postgres 時,出現如下錯誤:
Executing (default): SELECT "id", "name", "age", "parentId", "createdAt", "updatedAt", "ParentId" FROM "Children" AS "Child";
(node:7496) UnhandledPromiseRejectionWarning: SequelizeDatabaseError: column "ParentId" does not exist
at Query.formatError (D:\work\www\express-starter\node_modules\sequelize\lib\dialects\postgres\query.js:386:16)
at Query.run (D:\work\www\express-starter\node_modules\sequelize\lib\dialects\postgres\query.js:87:18)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:7496) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:7496) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我已經嘗試在 child.js(模型)中添加外鍵,但仍然出現此錯誤。
我在哪里做錯了?
您沒有在從Parent
到Children
的關聯中將parentId
指示為foreignKey
選項,這就是為什么 Sequelize 會自動生成其名稱,如ParentId
。 只需指出與belongsTo
中相同的選項和值,如下所示:
Parent.hasMany(models.Child, { foreignKey: "parentId" });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.