如何在sequelize模型中定义索引?

ahy6op9u  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(437)

我正在尝试为sequelize模型中的一个sql列创建一个简单的非唯一索引。我试着跟随这篇文章:如何在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]”附近使用的正确语法, createdAt 日期时间不为空, updatedAt datetime不为空,第1行的p'
我在server.js文件中的代码如下:

models.sequelize.sync().then(function () {
    server.listen(port, () => {
        console.log('server ready')
    })
});

我的设置有什么问题?有没有其他方法可以用sequelize来实现这一点?

ippsafx7

ippsafx71#

它也可以在单次迁移中工作。
在我的例子中,只需在迁移文件中执行addindex after createtable方法
迁移:

return queryInterface.createTable('Item', {
    // columns...
}).then(() => queryInterface.addIndex('Item', ['OwnerId']))
.then(() => {
    // perform further operations if needed
});

在迁移文件中对我有用。

iyr7buue

iyr7buue2#

差不多了。应在新对象中添加索引,如下所示:

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;
};

相关问题