0
我有沒有任何主鍵的sequelize模型:插入數據時,如何停止創建不想要的主鍵時出現sequelize?
module.exports = (sequelize, DataTypes) => {
const usersDoors = sequelize.define('usersDoors',
{
user_uid: {
type: DataTypes.UUID,
allowNull: false,
},
door_uid: {
type: DataTypes.UUID,
allowNull: false,
},
property_manager_uid: {
type: DataTypes.UUID,
allowNull: true,
},
tenant_uid: {
type: DataTypes.UUID,
allowNull: true,
},
created_at: {
type: DataTypes.INTEGER,
allowNull: false,
},
},
{
tableName: 'users_doors',
indexes: [
{
name: 'doors_users_indexes',
unique: true,
fields: ['user_uid', 'door_uid', 'property_manager_uid', 'tenant_uid'],
},
],
classMethods: {
associate: (models) => {
usersDoors.belongsTo(models.users, { foreignKey: 'user_uid' });
usersDoors.belongsTo(models.doors, { foreignKey: 'door_uid' });
usersDoors.belongsTo(models.propertyManagers, { foreignKey: 'property_manager_uid' });
usersDoors.belongsTo(models.tenants, { foreignKey: 'tenant_uid' });
},
},
});
return usersDoors;
};
當我插入數據(通過sequelize),sequelize增加了一個複合主鍵包括第一2列(user_uid和door_uid)的表。這是破壞我的東西,我不想要它。
如何在插入數據時停止創建不需要的主鍵的後綴化?
更多細節:
- 方言:在PostgreSQL
- sequelize(節點包)版本:3.30.2
- PostgreSQL的版本:PSQL(9.6.1,9.5.5服務器)
- 節點版本(這與任何事情無關):6.9.1
最後,這裏是這個模型的續集遷移:
const tableName = 'users_doors';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable(tableName, {
user_uid: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'users',
key: 'uid',
},
},
door_uid: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'doors',
key: 'uid',
},
},
property_manager_uid: {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'property_managers',
key: 'uid',
},
},
tenant_uid: {
type: Sequelize.UUID,
allowNull: true,
references: {
model: 'tenants',
key: 'uid',
},
},
created_at: {
type: Sequelize.INTEGER,
allowNull: false,
},
})
.then(() => {
return queryInterface.addIndex('users_doors',
['user_uid', 'door_uid', 'property_manager_uid', 'tenant_uid'],
{
indexName: 'doors_users_indexes',
indicesType: 'UNIQUE',
});
});
},
down: (queryInterface) => {
return queryInterface.dropTable(tableName)
.then(() => {
return queryInterface.removeIndex('users_doors', ['user_uid', 'door_uid', 'property_manager_uid', 'tenant_uid']);
});
},
};
這類作品在sequelize不會產生額外的主鍵,但現在它正在發明一個獨特的約束,在那些相同的2列,你會發現我實際設置的唯一約束是在4列...... – Shawn
我已經更新了有關自動「唯一」約束的答案。 – piotrbienias
我最終刪除了belongsToMany關聯,並用多個hasMany和belongsTo關聯替換它們。這解決了問題,現在剩下的唯一小問題是sequelize正在創建一個「id」列作爲主鍵,這是我從未要求過的。這我可以忍受,但因爲我可以簡單地忽略那一欄。你的解決方案是否也會阻止這個不太麻煩的問題發生? – Shawn