Tartalomjegyzék

< Express

Express - Táblák kapcsolása ES

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'
employees.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:

employees.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,
        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ő"
      }
    }
  ]
}