[note] sequelize 筆記
CLI
$ npm install --save sequelize-cli
$ npx sequelize init
$ npx sequelize db:create
$ npx sequelize db:migrate
$ npx sequelize db:seed:all
$ npx sequelize db:seed:undo:all
$ npx sequelize db:drop
# 針對測試環境,在最前面加上 NODE_ENV=test
$ NODE_ENV=test npx sequelize db:create
$ NODE_ENV=test npx sequelize db:migrate
# 建立 User Model 及其對應欄位
$ npx sequelize model:generate --name User --attributes name:string,email:string,password:string
$ npx sequelize model:generate --name Restaurant --attributes name:string,tel:string,address:string,opening_hours:string,description:text
# 新增 migration 檔案,名稱為 add-isAdmin-to-users
$ npx sequelize migration:generate --name add-isAdmin-to-users
# 新增 seed 檔案
$ npx sequelize seed:generate --name my-seed-file
Controller 常用方法
Query
const db = require('../models');
const { User } = db;
// findAll
User.findAll({
raw: true,
order: [
createdAt:
]
}).then(users);
// findByPK
User.findByPk(userId).then(user)
Create
const db = require('../models');
const { User } = db;
User.create({
name,
tel,
address,
});
Update
const db = require('../models');
const { User } = db;
const user = await User.findByPk(userId);
await user.update({
tel,
});
Delete
const db = require('../models');
const { User } = db;
const user = await User.findByPk(userId);
user.destroy();
Model 常用方法
hasMany
module.exports = (sequelize, DataTypes) => {
const Category = sequelize.define(
'Category',
{
name: DataTypes.STRING,
},
{},
);
Category.associate = function (models) {
// 將可以使用 category.Restaurants
Category.hasMany(models.Restaurant);
};
return Category;
};
belongsTo
module.exports = (sequelize, DataTypes) => {
const Restaurant = sequelize.define(
'Restaurant',
{
// ...
},
{},
);
Restaurant.associate = function (models) {
// 將可以使用 restaurant.Category
Restaurant.belongsTo(models.Category);
};
return Restaurant;
};