sequelize学习笔记

示例:

const Sequelize = require('sequelize');
// 建立连接
const sequelize = new Sequelize('test', 'root', '19931119', {
    host: 'localhost',
    dialect: 'mysql',//mysql 等
    operatorsAiases: false
})
// 1.定义模型Model-fruits (表名,字段名,其它配置)
const Fruit = sequelize.define('fruits', {
    name: Sequelize.STRING(20),
    price: { type: Sequelize.FLOAT, allowNull: false },
    stock: { type: Sequelize.INTEGER, defaultValve: 0 }
}, {
        timestamps: false,
        getterMethods: {
            amount() {
                return this.getDataValue('stock') + 'kg'
            }
        },
        setterMethods: {
            amount(val) {
                const idx = val.indexOf('kg');
                const v = val.slice(0, idx);
                this.setDataValue('stock', v);
            }
        }
    })
//同步 {force:true},强制同步
Fruit.sync({ force: true })
    .then(async () => {
        //插入数据
        await Fruit.create({ name: '香蕉', price: 3.5 })
        fruits = await Fruit.findAll()
        //更新实例1  修改amount,触发setterMethods 
        fruits[0].amount = '16kg';
        fruits[0].save();
        //更新实例2
        await Fruit.update({ price: 3.5 }, { where: { name: '香蕉' } })
        //删除
        await Fruit.destroy({ where: { name: '香蕉' } })
    })

1对多查询

const Sequelize = require('sequelize');
// 建立连接
const sequelize = new Sequelize('test', 'root', '19931119', {
    host: 'localhost',
    dialect: 'mysql',//mysql 等
    operatorsAiases: false
})

// 1:N 示例
const Player = sequelize.define('players', {
    name: Sequelize.STRING(20)
})
const Team = sequelize.define('teams', {
    name: Sequelize.STRING(20)
})
Player.belongsTo(Team);//放在前面 1端建立关系 查球员属于哪个球队
Team.hasMany(Player);//N端建立关系 球队有几个球员
//这里不是具体某个模型,而是sequelize实例
sequelize.sync({ force: true })
    .then(async () => {
        //插入数据
        await Team.create({ name: '火箭' })
        // await Player.create({ name: '哈登', teamId: 1 })
        // await Player.create({ name: '保罗', teamId: 1 })
        await Player.bulkCreate([{ name: '哈登', teamId: 1 }, { name: '保罗', teamId: 1 }]);
        // 关联查询
        const players = await Player.findAll({ include: [Team] })
        console.log(JSON.stringify(players, null, 2));
    })

多对多示例:

const Sequelize = require('sequelize');
// 建立连接
const sequelize = new Sequelize('test', 'root', '19931119', {
    host: 'localhost',
    dialect: 'mysql',//mysql 等
    operatorsAiases: false
})

// N:N 示例
const Fruit = sequelize.define("fruits          q", { name: Sequelize.STRING });
const Category = sequelize.define("categories", { name: Sequelize.STRING });
FruitCategory = Fruit.belongsToMany(Category, {
    through: "FruitCategory"
});
sequelize.sync({ force: true })
    .then(async () => {
        // 插入测试数据
        await Fruit.create(
            {
                name: "香蕉",
                categories: [{ id: 1, name: "热带" }, { id: 2, name: "温带" }]
            }, {
                include: [FruitCategory]
            }
        );
        // 多对多联合查询
        const fruits = await Fruit.findOne({
            where: { name: "香蕉" }, // 通过through指定条件、字段等
            include: [{ model: Category, attributes: ['id', 'name'] }]
        });
        console.log(JSON.stringify(fruits, null, 2));
    })
原文地址:https://www.cnblogs.com/superlizhao/p/11115722.html