这是我失败的查询:
Models.OrdersProducts.create({
orderId: 1,
productId: 1,
});
有错误:
Executing (default): INSERT INTO "OrdersProducts" ("orderId","productId","createdAt","updatedAt","OrderId") VALUES (1,1,'2018-02-25 12:51:00.110 +00:00
','2018-02-25 12:51:00.110 +00:00',NULL) RETURNING *;
Unhandled rejection SequelizeDatabaseError: column "OrderId" of relation "OrdersProducts" does not exist
at Query.formatError (/Users/aakashverma/Documents/sequelize-join-table/node_modules/sequelize/lib/dialects/postgres/query.js:363:16)
我的表没有列
OrderId
(大写 O),只有 orderId
注意 :我的
Orders
和 Products
表确实有一个 id
1 的条目,这不是问题。这是我对
OrdersProducts
的迁移:module.exports = {
up: (queryInterface, Sequelize) => queryInterface.createTable('OrdersProducts', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER,
},
orderId: {
type: Sequelize.INTEGER,
references: {
model: 'Orders',
key: 'id',
},
},
productId: {
type: Sequelize.INTEGER,
references: {
model: 'Products',
key: 'id',
},
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
},
}),
down: (queryInterface, Sequelize) => queryInterface.dropTable('OrdersProducts'),
};
这是模型文件:
模型/订单Products.js
module.exports = (sequelize, DataTypes) => {
const OrdersProducts = sequelize.define('OrdersProducts', {
orderId: DataTypes.INTEGER,
productId: DataTypes.INTEGER,
}, {});
return OrdersProducts;
};
模型/订单.js
module.exports = (sequelize, DataTypes) => {
const Orders = sequelize.define('Orders', {
userId: DataTypes.INTEGER,
}, {});
Orders.associate = function (models) {
Orders.belongsTo(models.Users);
Orders.belongsToMany(models.Products, { through: 'OrdersProducts', as: 'product' });
};
return Orders;
};
模型/产品.js
module.exports = (sequelize, DataTypes) => {
const Products = sequelize.define('Products', {
name: DataTypes.TEXT,
}, {});
Products.associate = function (models) {
Products.belongsToMany(models.Orders, { through: 'OrdersProducts', as: 'order' });
};
return Products;
};
最佳答案
奇怪的。
注意我在查询中使用 1 作为 id,因为这是自动增量 id
键值,因为我只在任何表中添加一个条目。
查看我的 Orders
模型:
module.exports = (sequelize, DataTypes) => {
const Orders = sequelize.define('Orders', {
userId: DataTypes.INTEGER,
}, {});
Orders.associate = function (models) {
Orders.belongsTo(models.Users);
Orders.belongsToMany(models.Products, { through: 'OrdersProducts', as: 'product' });
};
return Orders;
};
和我的
Products
模型:module.exports = (sequelize, DataTypes) => {
const Products = sequelize.define('Products', {
name: DataTypes.TEXT,
}, {});
Products.associate = function (models) {
Products.belongsToMany(models.Orders, { through: 'OrdersProducts', as: 'order' });
};
return Products;
};
这两个似乎为我的
OrdersProducts
表创建了自己的属性 OrderId
和 ProductId
(首字母大写; 不知道为什么以及如何生成名称 ),因此,我得到了 OrderId
东西。如果我从
belongToMany
模型中删除 Orders
关联,我就会发现 ProductId
列出现相同的错误。最后,我找到了 the accepted answer here,它以某种方式告诉我,使用关联提供的列并在
OrdersProducts
列中删除相应的列。现在我的查询,BTW 工作正常,看起来像:
const Models = require('./models');
// Models.Users.create({
// name: 'Aakash',
// });
// Models.Orders.create({
// userId: 1,
// });
// Models.Products.create({
// name: 'lash',
// });
Models.OrdersProducts.create({
OrderId: 1,
ProductId: 1,
});
和模型看起来像(再次注意大写字母):
module.exports = (sequelize, DataTypes) => {
const OrdersProducts = sequelize.define('OrdersProducts', {
OrderId: DataTypes.INTEGER,
ProductId: DataTypes.INTEGER,
}, {});
return OrdersProducts;
};
关于自动列命名的谜团仍然存在。
附言这是最奇怪的部分。
现在我有一个表
Users
,正如您从上面的代码中看到的那样。注意 belongsTo
在模型中的作用。模型/用户.js
module.exports = (sequelize, DataTypes) => {
const Users = sequelize.define('Users', {
name: DataTypes.STRING,
}, {});
Users.associate = function (models) {
Users.hasMany(models.Orders);
};
return Users;
};
模型/订单.js
module.exports = (sequelize, DataTypes) => {
const Orders = sequelize.define('Orders', {
userId: DataTypes.INTEGER,
}, {});
Orders.associate = function (models) {
Orders.belongsTo(models.Users);
Orders.belongsToMany(models.Products, { through: 'OrdersProducts', as: 'product' });
};
return Orders;
};
下面的查询仍然有效,并向
Orders
添加了一个条目(看看它如何不需要我从 userId
表中删除 Orders
列,也没有提出自己的 UserId
-_-):Models.Users.create({
name: 'Aakash',
});
Models.Orders.create({
userId: 1,
});
模型/用户.js
module.exports = (sequelize, DataTypes) => {
const Users = sequelize.define('Users', {
name: DataTypes.STRING,
}, {});
Users.associate = function (models) {
Users.hasMany(models.Orders);
};
return Users;
};
模型/订单.js
module.exports = (sequelize, DataTypes) => {
const Orders = sequelize.define('Orders', {
userId: DataTypes.INTEGER,
}, {});
Orders.associate = function (models) {
Orders.belongsTo(models.Users);
Orders.belongsToMany(models.Products, { through: 'OrdersProducts', as: 'product' });
};
return Orders;
};
关于javascript - Sequelize 尝试将数据输入到未知列 [Postgres],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48973789/