User라는 모델이 있지만 Sequelize는 DB에 저장하려고 할 때마다 테이블 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
})
답변
singuar 및 복수 정의에 대해 서로 다른 모델 이름이 필요한 경우 모델 옵션에서 이름을 매개 변수로 전달할 수 있습니다.
이 예를 살펴보십시오.
const People = sequelize.define('people', {
name: DataTypes.STRING,
}, {
hooks: {
beforeCount (options) {
options.raw = true;
}
},
tableName: 'people',
name: {
singular: 'person',
plural: 'people'
}
});
이것은 단일 레코드가 쿼리 될 때 객체로 “person”을 반환하고 여러 레코드를 가져올 때 배열로 “people”을 반환합니다.