Sequelize-CLI 基本使用

寫起來才不會忘。

懶人包

第一步當然是先安裝起來:

1
npm install --save-dev sequelize-cli

接下來的步驟:

  1. 初始化 npx sequelize-cli init
  2. 產生 model model:generate
  3. 執行 migration db:migate

初始化

使用 npx sequelize-cli init 來初始化 ORM,不過其實也能 node_modules/.bin/sequelize init,速度上可能會快一點。

總之這一步會產生幾個資料夾:

1
2
3
4
5
6
7
8
├───config
│ config.json 連到資料庫的設定檔

├───migrations 管理資料庫的狀態(新建 or 刪除)
├───models
│ index.js 用來自動產生 model

└───seeders 用來放種子檔案

這邊最重要的是先去 config.json 把資料庫連線給設定好,接著就能進到下一步了。

至於 migrations 的部分做個解釋,可以把它想成是「用來改變資料庫狀態」的東西,裡面會有兩個 function:updown

up 的作用就是「當要進入下一個狀態時,create 一個新的 table」,而 down 則是「當要返回到前一個狀態時,drop 掉原本的 table。

所以:

  • 進入下個狀態:db:migrate
  • 返回上個狀態:db:migrate:undo

建立 Model

建立 Model 的指令:model:generate

  • name 代表 Model 名稱
  • attribute 代表結構的設定
1
npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string

其實就跟這個一樣,只是改成用 CLI 來處理而已:

1
2
3
4
5
6
7
8
9
10
11
// 定義一個 User 的 table
const User = sequelize.define('User', {
// 設定欄位資訊
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING
}
})

執行完後就會產生一個新的 Model 和 Migration:

1
2
3
4
5
├───migrations
│ 20220325094327-create-user.js // 新增的檔案
├───models
│ index.js
│ user.js 新產生的 model

接著可以注意一下 Model 的部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
static associate(models) {
// 要關聯的 table 寫在這裡
}
}
User.init({
// 根據剛剛下的指令產生的 Schema
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {
sequelize,
modelName: 'User',
});
return User;
};

如果你對產出來的結果不滿意,都可以在這裡做修改。

執行 Migration

1
npx sequelize-cli db:migrate

簡單來說,這一步就跟 sync 在做的事情一樣,到這裡才是真正到資料庫建立 table

最後

上面都做好以後,就可以直接在你的 JS 裡面使用 ORM 了:

1
2
3
4
5
6
7
8
9
10
// 所有 model 都會被綁在 db 上
const { User, Comment } = require('./models');

// 建立新的資料
User.create({
firstName: 'PeaNu',
lastName: 'yoyo'
}).then(() => {
console.log('done');
})

就這麼簡單囉。

附註:想要改 Schema 的話要怎麼改

補更:改了 Migration 後一樣要改 Model,不然後來的操作會有 Bug(找不到對應欄位,變成空值)

如果是透過 db:migrate 的方式來同步資料庫,那就要去改 migration 裡面的資料,強調一下:

  • 不是改 Model
  • 不是改 Model
  • 不是改 Model

改 Model 只適用在 sync 的情況,這點要特別注意。

接著流程是這樣:

  1. 先去改 migration 中的內容
  2. db:migate:undo 先回到上一層狀態
  3. db:migate 建立新的 migration

就這麼簡單囉!

mentor-program-day102 Sequelize 建立關聯
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×