這是在講關於一名叫 Koa 的全端勇士傳說-MySQL篇-sequelize(3)
前言
前面知道可以使用 migrations 來做遷移,而 migrations 也可以方便我們轉移資料到新資料庫(當然不包含資料內容),那麼在實作上該如何透過 sequelize 來取得表單資料並新增資料進去資料表呢?
查詢資料庫
接下來我們來準備修改一下 route 來做一下資料庫查詢,首先先在 route 引入 models
於 route/index.js 修改 get router
1 | const models = require('./models'); |
執行之後若沒問題就會看到這個訊息
那麼我們該如何打印出資料呢?由於 sequelizejs 是支援 Promise 的,順便我們這邊改寫成使用查詢所有資料並且輸入到前端
1 | router.get('/',csrfMD,async (ctx, next) => { |
由於拉出來的資料會是陣列物件,所以前端必須使用迴圈來做處理
1 | <ul> |
你有可能會問說為什麼要 dataValues
才取得資料,因為拉出來的資料都在 dataValues
物件下
這麼在這邊我們學會了 findAll()
(查詢全部)、findOne()
(單一查詢)
但是這邊有幾個地方要注意 findAll()
與 findOne()
都可以加入條件判斷 Where
- findAll() - 簡單來講就是找一大推,若條件太少資料太多就會影響效能
- findOne() - 簡單講就是找一個,基本上使用的時候必須考慮尋找的唯一值,與
findAll()
最大差異在於findAll()
找出來是一個陣列物件,而findOne()
只是物件
另外補充兩個查詢方式
- findById() - 這個與 findOne() 類似
- findOrCreate() - 這個就是當查詢不到的時候就建立一個
另外可以塞入的選項條件有這些
- limit - 限制數量
- offset - 略過幾筆
- group - 群組
- order - 排序
- ASC 遞增排序
- DESC 遞減排序
1 | router.get('/',csrfMD,async (ctx, next) => { |
那麼就會得到這個結果