私はSequelizeを使い始めています。私は彼らが彼らのウェブサイトで提供しているドキュメントに従っています: http://docs.sequelizejs.com/manual/installation/getting-started.html
const Sequelize = require('sequelize');
const sequelize = new Sequelize('haha', 'postgres', 'postgres', {
Host: 'localhost',
dialect: 'postgres',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
// SQLite only
storage: 'path/to/database.sqlite'
});
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
}
});
// force: true will drop the table if it already exists
User.sync({force: true}).then(() => {
// Table created
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
ここまでは、すべてが完璧に機能します。そして、テーブル「ユーザー」が正しく構築され、データが入力されます。 (Sequelizeが「ユーザー」に「s」を自動的に追加することは理解できませんが、説明があります。)
ただし、次のコード部分を追加すると、
User.findAll().then(users => {
console.log(users)
})
私はこのエラーを受け取ります:
未処理の拒否SequelizeDatabaseError:リレーション "users"は存在しません
だから私の質問は:
モデルを定義するときに構成を追加できます。この場合、追加する必要があるオプションはfreezeTableName
で、名前が複数形になるのを防ぎます。
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
}
}, {
// disable the modification of table names; 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,
});
そのコードを2回実行します。
2回目に実行する前に、次のコードをコメントアウトします。
// force: true will drop the table if it already exists
User.sync({force: true}).then(() => {
// Table created
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
これを回避できる別の興味深い方法があります。ただし、この実装方法に本当に焦点を当てる必要があります。
const User = sequelize.define("user", {
firstname: {
type: Sequelize.STRING
},
lastname: {
type: Sequelize.STRING
}
});
意図的にuser
をここに入れ、users
をコーディングの他の場所で使用します(sequelizeは、渡されたすべてのモデル名(defineの最初のパラメーター)を自動的に複数に変換します)。このコーディング方法により、コードが簡略化されます。