Я довольно новичок в этом (используя sequelize), и все для меня ново. Дело в том, что я могу создавать и получать пользователей через мой «users.model. js», но теперь я хочу создать модель с именем «data.model. js», чтобы связать некоторые данные с определенным пользователем.
Таким образом, в соответствии с документами по sequelize, мои ассоциации должны быть следующими:
Users.hasMany(Data)
Data.belongsTo(Users)
Но когда sequelize создает мои таблицы, у меня нет внешнего ключа в моей таблице данных.
Я поделюсь с вами своим кодом:
файл конфигурации (config. js):
const Sequelize = require('sequelize');
const connection = new Sequelize('drglicemia', 'root', '', {
host: 'localhost',
dialect: 'mysql'
});
module.exports = connection;
data.model. js:
const sequelize = require('sequelize');
const db = require('../config/database');
const usersTable = require('./users.model')
let Data = db.define('tabeladados', {
dta: { type: sequelize.DATEONLY },
hora: { type: sequelize.DATE },
indiceglicemia: { type: sequelize.STRING },
insulina: { type: sequelize.STRING },
medicacao: { type: sequelize.STRING },
}, {
timeStamps: false, tableName: 'tabeladados'
});
//associates the dataTable table with the users
Data.associate = () => {
Data.belongsTo(usersTable)
}
module.exports = Data;
users.model. js:
const sequelize = require('sequelize');
const promise = require('bluebird')
const bcrypt = promise.promisifyAll(require('bcrypt'))
const db = require('../config/database');
const dataTable = require('./data.model')
let Users = db.define('utilizadores', {
username: { type: sequelize.STRING },
email: { type: sequelize.STRING },
password: { type: sequelize.STRING },
}, {
timeStamps: false, tableName: 'utilizadores',
});
//encrypts the password before submiting to the database
Users.beforeCreate((user, options) => {
return bcrypt.hash(user.password, 10)
.then(hash => {
user.password = hash;
})
.catch(err => {
throw new Error();
});
});
//validates the password submited by the user with the one encrypted in the database
Users.prototype.validPassword = async (password) => {
return await bcrypt.compare(password, this.password);
}
//associates the users table with the dataTable
Users.associate = () => {
Users.hasMany(dataTable)
}
module.exports = Users;
Я считаю, что когда я пытаюсь связать свои таблицы, я делаю что-то не так, потому что чувствую, что делаю это неправильно.
Не знаю, но все работает, кроме этого.
Но это похоже на то, что я сказал в начале, я новичок в сиквелизе xD