我在选择员工和休假数据使用包含在两个表中的主号码非常困惑.有人可以帮助我,这里是代码:
karyawan模型文件:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Karyawan = sequelize.define('Karyawan', {
nomorInduk: DataTypes.STRING,
nama: DataTypes.STRING,
alamat: DataTypes.STRING,
tanggalLahir: DataTypes.DATE,
tanggalBergabung: DataTypes.DATE
}, {});
Karyawan.associate = function (models) {
Karyawan.hasMany(models.Cuti, { foreignKey: 'nomorInduk' });
};
return Karyawan;
};
字符串
索引模型文件:
'use strict';
const Sequelize = require('sequelize');
const dotenv = require('dotenv');
const db = {};
const KaryawanModel = require('./karyawan');
const CutiModel = require('./cuti');
dotenv.config();
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
dialect: 'mysql',
logging: console.log
});
sequelize.sync({ force: false })
.then(() => {
console.log('Database synchronized');
})
.catch((error) => {
console.error('Failed to synchronize database:', error);
});
const Karyawan = KaryawanModel(sequelize, Sequelize);
const Cuti = CutiModel(sequelize, Sequelize);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
// Set up associations inside the models
Karyawan.associate({ Cuti });
Cuti.associate({ Karyawan });
module.exports = { db, Karyawan, Cuti };
型
cuti模型文件:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Cuti = sequelize.define('Cuti', {
nomorInduk: DataTypes.STRING,
tanggalCuti: DataTypes.DATE,
lamaCuti: DataTypes.INTEGER,
keterangan: DataTypes.TEXT
}, {});
Cuti.associate = function (models) {
Cuti.belongsTo(models.Karyawan, { foreignKey: 'nomorInduk' });
};
return Cuti;
};
型
获取karyawan和cuti数据的处理程序:
async function getKaryawanByNomorInduk(req, res) {
try {
const nomorInduk = req.params.nomorInduk;
const karyawan = await models.Karyawan.findOne({
where: {
nomorInduk: nomorInduk
},
include: [{
model: models.Cuti,
attributes: ['id', 'nomorInduk', 'tanggalCuti', 'lamaCuti', 'keterangan'],
}],
});
if (!karyawan) {
return res.status(404).json({ message: 'Tidak ada data karyawan dengan nomor induk tersebut.' });
}
const result = {
status: 'ok',
data: karyawan,
};
res.json(result);
} catch (error) {
res.status(500).json({ message: 'Gagal mendapatkan data karyawan.', error: error.message });
}
}
型
我总是得到这样的结果:Result I got
我想要的结果是这样的:The result I want
1条答案
按热度按时间xiozqbni1#
由于您只指定了
foreignKey: 'nomorInduk'
,那么Cuti
将像这样链接到Karyawan
:Cuti.nomorInduk=Karyawan.id因为如果您没有指定1:n关系中1表的键,Sequelize将自动使用主键字段,在这种情况下为id
。只需在hasMany
和belongsTo
关联中显式指定另一个侧键:字符串
请注意,为了使这种关系与非默认主表关键字字段一起工作,您需要在
Karyawan
表中的nomorInduk
列上添加唯一索引。