TeamGame을 사용해 팀과 경기의 관계를 정의.Player 모델과 Profile 모델 간 관계 정의:PlayerModel.hasOne(ProfileModel, {
onDelete: "CASCADE",
onUpdate: "CASCADE",
foreignKey: "player_id",
});
ProfileModel.belongsTo(PlayerModel, {
foreignKey: "player_id",
});Team 모델과 Player 모델 간 관계 정의:TeamModel.hasMany(PlayerModel, {
foreignKey: "teamid",
sourceKey: "team_id",
});
PlayerModel.belongsTo(TeamModel, {
foreignKey: "teamid",
targetKey: "team_id",
});Team 모델과 Game 모델 간 M:N 관계 정의:TeamModel.belongsToMany(GameModel, {
through: TeamGameModel,
foreignKey: "team_id",
});
GameModel.belongsToMany(TeamModel, {
through: TeamGameModel,
foreignKey: "game_id",
});Player CRUD:
Team 검색 및 정렬:
Team - Player JOIN:
Database 연결 성공:
15_MCV-sequelize
├── config/
│ ├── config.js
├── controller/
│ ├── Cmain.js
├── models
│ ├── Game.js
│ ├── Player.js
│ ├── Team.js
│ ├── TeamGame.js
│ ├── index.js
│ ├── profile.js
├── routes
│ ── index.js
├── node_modules/
│ ├── 다양한 파일
├── views/
│ ├── index.ejs
├── app.js
├── init.sql
├── package-lock.json
└── package.json
config/config.jscontroller/Cmain.jsmodels/index.jsmodels/*.jsGame.js, Player.js, Team.js, TeamGame.js, profile.js 모델은 테이블 구조 및 데이터 타입을 명시.routes/index.jsviews/index.ejsapp.jsapp.jsconst express = require("express");
const app = express();
const PORT = 8080;
const { sequelize } = require("./models");
// db={sequelize:~~~~, Sequelize: ~~~~}
// const {sequelize} =db;
// set middleware
app.set("view engine", "ejs");
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
// router 설정
const indexRouter = require("./routes");
app.use("/", indexRouter);
sequelize
.sync({ force: false })
.then(() => {
console.log("db connection success!");
app.listen(PORT, () => {
console.log(`http://localhost:${PORT}`);
});
})
.catch((err) => {
console.log("db connection Err!");
console.log(err);
});