Sequelize 筆記

// db.js

const { Sequelize } = require('sequelize');

const sequelize = new Sequelize('database', 'root', '1234', {
  dialect: 'mysql',
  timezone: '+08:00',
  define: {
    underscored: true, // 欄位有下㡳線
    freezeTableName: true, // 不要自動改變 table 名稱
  },
});

module.exports = sequelize;

// app.js

sequelize
  .sync()
  .then(() => {
    app.listen(3000, () => {
      console.log('listening on port 3000');
    });
  })
  .catch((err) => {
    console.log(err);
  });

// model

const TeamTaiwan = sequelize.define(
  'teamTaiwan',
  { ... },
  { tableName: 'team_taiwan' }
);

module.exports = TeamTaiwan;

---

const TaiwanPlayer = sequelize.define(
  'taiwanPlayer',
  { ... },
  { tableName: 'taiwan_player' }
);

module.exports = TaiwanPlayer;

// TeamTaiwan 跟 TaiwanPlayer 是一對多的關係

TeamTaiwan.hasMany(TaiwanPlayer);
TaiwanPlayer.belongsTo(TeamTaiwan);

新增 TaiwanPlayer 的 Foreign Key(team_taiwan_id),在程式裡會變成 teamTaiwanId

TaiwanPlayer.create({
  name: formData.name,
  teamTaiwanId: teamTaiwanId,
})
  .then(...)
  .catch(...);

有用到下面的 sequelize.fn, sequelize.col 語法時,取欄位值有二個方法:

TaiwanPlayer.findAll({
  attributes: [[sequelize.fn('COUNT', sequelize.col('name')), 'count_name']],
})

---

JSON.parse(JSON.stringify(data[0]))

或

data[0].get().count_name

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端