我有一个名为 User 的模型,但每当我尝试保存在数据库中时,Sequelize 都会查找表 USERS。有谁知道如何设置 Sequelize 使用单数表名?谢谢。
文档声明您可以使用该属性
freezeTableName
。
请看这个例子:
var Bar = sequelize.define('Bar', { /* bla */ }, {
// don't add the timestamp attributes (updatedAt, createdAt)
timestamps: false,
// don't delete database entries but set the newly added attribute deletedAt
// to the current date (when deletion was done). paranoid will only work if
// timestamps are enabled
paranoid: true,
// don't use camelcase for automatically added attributes but underscore style
// so updatedAt will be updated_at
underscored: true,
// disable the modification of tablenames; By default, sequelize will automatically
// transform all passed model names (first parameter of define) into plural.
// if you don't want that, set the following
freezeTableName: true,
// define the table's name
tableName: 'my_very_custom_table_name'
})
虽然接受的答案是正确的,但您可以对所有表执行一次此操作,而不必为每个表单独执行此操作。您只需将类似的选项对象传递到 Sequelize 构造函数中,如下所示:
var Sequelize = require('sequelize');
//database wide options
var opts = {
define: {
//prevent sequelize from pluralizing table names
freezeTableName: true
}
}
var sequelize = new Sequelize('mysql://root:123abc@localhost:3306/mydatabase', opts)
现在,当您定义实体时,您不必指定
freezeTableName: true
:
var Project = sequelize.define('Project', {
title: Sequelize.STRING,
description: Sequelize.TEXT
})
您可以直接执行,而不是在每个已定义一次的表中指定 像下面这样
var db_instance = new Sequelize(config.DB.database, config.DB.username, config.DB.password, {
host: config.DB.host,
dialect: config.DB.dialect,
define: {
timestamps: true,
freezeTableName: true
},
logging: false
});
或
您也可以直接告诉 Sequelize 表的名称:
sequelize.define('User', {
// ... (attributes)
}, {
tableName: 'Employees'
});
您可以在sequelize.js的文档中看到这两个方法
文档。与
freezeTableName
相关的sequelize.js
如果您需要为单数和复数定义使用不同的模型名称,您可以在模型选项中将名称作为参数传递。
请看这个例子:
const People = sequelize.define('people', {
name: DataTypes.STRING,
}, {
hooks: {
beforeCount (options) {
options.raw = true;
}
},
tableName: 'people',
name: {
singular: 'person',
plural: 'people'
}
});
当查询单个记录时,这将返回“person”作为对象;当我们获取多个记录时,这将返回“people”作为数组。
import {Model, Sequelize, DataTypes} from 'sequelize';
import {IUser} from "../model/IUser";
module.exports = (sequelize: Sequelize) => {
class User extends Model<IUser> implements IUser {
public email!: string;
public password!: string;
static associate(models: any) {
// define association here
}
}
User.init({
email: {
type: DataTypes.STRING,
allowNull: false,
primaryKey: true
},
password: {
type:DataTypes.STRING,
allowNull: false
},
}, {
sequelize,
modelName: 'user',
tableName: 'your_table_name'
});
return User;
};