我正在尝试在Sequelize模型内为我的SQL列之一创建一个简单的非唯一索引。我试图关注这篇文章:How to define unique index on multiple columns in sequelize。
这是我的代码:
module.exports = (sequelize, DataTypes) => {
const Item = sequelize.define('Item', {
itemId: DataTypes.STRING,
ownerId: DataTypes.INTEGER,
status: DataTypes.STRING,
type: DataTypes.STRING,
nature: DataTypes.STRING,
content: DataTypes.STRING,
moment: DataTypes.BIGINT,
indexes:[
{
unique: 'false',
fields:['ownerId']
}
]
});
return Item;
};
我收到此错误:
未处理的拒绝SequelizeDatabaseError:您的错误 SQL语法;检查与您的MariaDB服务器相对应的手册 在'[object Object],
createdAt
附近使用的正确语法的版本 DATETIME NOT NULL,updatedAt
DATETIME NOT NULL,第1行的P'
我在server.js文件中的代码是这样的:
models.sequelize.sync().then(function () {
server.listen(port, () => {
console.log('server ready')
})
});
我的设置有什么问题?使用Sequelize还有其他方法吗?
答案 0 :(得分:4)
快到了。您应该像这样在新对象中添加索引:
module.exports = (sequelize, DataTypes) => {
const Item = sequelize.define('Item', {
itemId: DataTypes.STRING,
ownerId: DataTypes.INTEGER,
status: DataTypes.STRING,
type: DataTypes.STRING,
nature: DataTypes.STRING,
content: DataTypes.STRING,
moment: DataTypes.BIGINT
},
{
indexes:[
{
unique: false,
fields:['ownerId']
}
]
});
return Item;
};
答案 1 :(得分:1)
它也可以在单个迁移中工作。
对于我来说,只需在迁移文件中的createTable方法之后执行addIndex
迁移:
return queryInterface.createTable('Item', {
// columns...
}).then(() => queryInterface.addIndex('Item', ['OwnerId']))
.then(() => {
// perform further operations if needed
});
在迁移文件中对我有用。