这是我的查询失败:
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'),
};
以下是模型文件:
模型/ OrdersProducts.js
module.exports = (sequelize, DataTypes) => {
const OrdersProducts = sequelize.define('OrdersProducts', {
orderId: DataTypes.INTEGER,
productId: DataTypes.INTEGER,
}, {});
return OrdersProducts;
};
模型/ Orders.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;
};
模型/ Products.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;
};
答案 0 :(得分:0)
怪异。
N.B。我在查询中使用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
< / strong>(首字母大写; 不知道为什么以及如何生成名称)因此,我得到了 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;
};
P.S。这是最奇怪的部分。
现在我有一张表Users
,因为您可以从上面的代码中看到。注意belongsTo
在模型中的运作方式。
模型/ users.js
module.exports = (sequelize, DataTypes) => {
const Users = sequelize.define('Users', {
name: DataTypes.STRING,
}, {});
Users.associate = function (models) {
Users.hasMany(models.Orders);
};
return Users;
};
模型/ orders.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
添加一个条目(看看它是如何不要求我从{{1}删除userId
列的它也没有提出自己的Orders
-_-):
UserId
模型/ users.js
Models.Users.create({
name: 'Aakash',
});
Models.Orders.create({
userId: 1,
});
模型/ orders.js
module.exports = (sequelize, DataTypes) => {
const Users = sequelize.define('Users', {
name: DataTypes.STRING,
}, {});
Users.associate = function (models) {
Users.hasMany(models.Orders);
};
return Users;
};