Sequelize 的scope

2019-04-22  本文已影响0人  RoyChina

文章转载自:https://www.jianshu.com/p/8242b841de9d

Scope: 定义好scope在后续的操作中可以减少条件的重复,如只选择未删除用户。

跟模型相关的地方都可以添加

// 修改默认所有操作的scope [defaultScope]
var Project = sequelize.define( 'project', {
    // Attributes
}, {
    defaultScope: {
        where: {
            active: true
        }
    },
    scopes: {
        deleted: {
            where: {
                deleted: true
            }
        },
        activeUsers: {
            include: [
                { model: User, where: { active: true } }
      ]
        }
    }
} );

// 查询所有active: true的Project
Project.findAll();
// 移除默认scope,设置为 deleted scope
Project.scope( 'deleted' ).findAll();

// 与上面等价
var DeletedProjects = Project.scope( 'deleted' );
DeletedProjects.findAll();

var Post = sequelize.define( 'post', attributes, {
    defaultScope: {
        where: {
            active: true
        }
    },
    scopes: {
        deleted: {
            where: {
                deleted: true
            }
        }
    }
} );

设置联系时,加入scope

User.hasMany( Post ); // regular getPosts association
User.hasMany( Post.scope( 'deleted' ), { as: 'deletedPosts' } );
上一篇 下一篇

猜你喜欢

热点阅读