【问题标题】:How to define an index, within a Sequelize model?如何在 Sequelize 模型中定义索引?
【发布时间】:2019-05-25 13:42:01
【问题描述】:

我正在尝试在 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, P' 在第 1 行

我在 server.js 文件中的代码是这样的:

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

我的设置有什么问题?有没有其他方法可以用 Sequelize 完成?

【问题讨论】:

    标签: mysql sql node.js sequelize.js


    【解决方案1】:

    差不多了。您应该像这样在新对象中添加索引:

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

    【讨论】:

    • 呵呵。如果这解决了这个问题,那么请接受我的回答:)
    • 我会在 4 分钟内,如果它允许我这样做:D
    • @Roi 是否需要是表中的实际字段或代码定义中提到的字段名称
    • @Root 我不确定你的意思。插入到 fields 数组中的字段名称对应于 Item 模型中的字段之一。如果我错了,请纠正我,但这些名称也将始终反映数据库表中字段的名称。
    • @Roi 假设有一个模型定义的列为 ItemId: { type: DataTypes.BIGINT, field: 'item_id', autoIncrement: true } 在这个索引应该是什么? ItemId 或 item_id
    【解决方案2】:

    它也可以在单个迁移中工作。

    在我的情况下,只需在迁移文件中的 createTable 方法之后执行 addIndex

    迁移:

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

    迁移文件对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-20
      • 2017-06-30
      • 2016-05-28
      • 1970-01-01
      • 2021-02-20
      • 2020-02-16
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多