[[:oktatas:web:back-end_framework:express|< Express]]
====== Express - Táblák kapcsolása ES ======
* **Szerző:** Sallai András
* Copyright (c) 2025, Sallai András
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== Táblák =====
employees(id, name, city, salary, rankId)
ranks(id, name)
===== Model =====
Importálnunk kell a Rank modelt az Employee modell állományában.
import Rank from './rank.js'
import { DataTypes } from 'sequelize'
import sequelize from '../database/database.js'
import Rank from './rank.js'
const Employee = sequelize.define('employee', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: { type: DataTypes.STRING, allowNull: false },
city: { type: DataTypes.STRING, allowNull: true },
salary: { type: DataTypes.DOUBLE, allowNull: true },
rankId: { type: DataTypes.INTEGER, allowNull: true }
})
Employee.belongsTo(Rank, { foreignKey: 'rankId' })
sequelize.sync({
force: false
})
export default Employee
Megadható a ranks táblában a célmező is:
Employee.belongsTo(Rank, {
foreignKey: 'rankId',
targetKey: 'id'
})
===== Hivatkozás az adatbázisban =====
Ha szeretnénk az adatbázisban is meg legyen a hivatkozás a ranks táblára:
import { DataTypes } from 'sequelize'
import sequelize from '../database/database.js'
import Rank from './rank.js'
const Employee = sequelize.define('employee', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: { type: DataTypes.STRING, allowNull: false },
city: { type: DataTypes.STRING, allowNull: true },
salary: { type: DataTypes.DOUBLE, allowNull: true },
rankId: {
type: DataTypes.INTEGER,
allowNull: true,
references: {
model: Rank,
key: 'id'
}
}
})
Employee.belongsTo(Rank, {
foreignKey: 'rankId'
})
sequelize.sync({
force: false
})
export default Employee
===== Kontroller =====
A dolgozók lekérdezéséhez kapcsoljuk a beosztásokat.
const employees = await Employee.findAll({
include: ['rank']
})
Megadhatjuk milyen mezőket szeretnénk látni. Ehhez a megoldáshoz importáljuk a employeecontroller.js
fájlban a Rank modellt.
import Rank from '../models/rank.js'
//...
const employees = await Employee.findAll({
include: {
model: Rank,
attributes: ['name']
}
})
===== Lehetséges kimenet =====
{
"success": true,
"data": [
{
"id": 1,
"name": "Erős István",
"city": "Szeged",
"salary": 395,
"rankId": 1,
"createdAt": "2025-07-28T09:15:14.714Z",
"updatedAt": "2025-07-28T09:15:14.714Z",
"rank": {
"name": "fejlesztő"
}
},
{
"id": 2,
"name": "Tápos István",
"city": "Szolnok",
"salary": 392,
"rankId": 2,
"createdAt": "2025-07-28T09:15:22.634Z",
"updatedAt": "2025-07-28T09:15:22.634Z",
"rank": {
"name": "tesztelő"
}
}
]
}