如何在其他范围内使用范围?

How to use Scope inside other Scope?

如何描述一个模型的 scope 我可以使用其他模型的 scope

我有第一个范围:

includeBookingSessionAndUsers: (userId) => ({
    include: [
        {
            model: sequelize.model('BookingSession'),
            where: {
                [Op.or]: [
                    { studentId: userId },
                    { tutorId: userId },
                ],
            }
        },
    ],
}),

我需要在第一个范围内使用下一个范围:

includeStudentAndTutor: () => ({
    include: [
        {
            model: sequelize.model('User'),
            as: 'tutor',
        },
        {
            model: sequelize.model('User'),
            as: 'student',
        }
    ]
}),

所以最后它就像我只有一个带有嵌套包含的范围一样:

includeBookingSessionAndUsers: (userId) => ({
    include: [
        {
            model: sequelize.model('BookingSession'),
            where: {
                [Op.or]: [
                    { studentId: userId },
                    { tutorId: userId },
                ],
            },
            include: [
                {
                    model: sequelize.model('User'),
                    as: 'tutor',
                },
                {
                    model: sequelize.model('User'),
                    as: 'student',
                }
            ]
        },
    ],
})

我找到了解决方案。

这个范围保持不变。

includeStudentAndTutor: () => ({
    include: [
        {
            model: sequelize.model('User'),
            as: 'tutor',
        },
        {
            model: sequelize.model('User'),
            as: 'student',
        }
    ]
}),

请注意,它是针对 BookingSession 型号

描述的

includeStudentAndTutor 将在其中调用的第二个范围在 Conversations 模型中进行了描述,这里是其工作描述

            includeBookingSessionAndUsers: (userId) => ({
                include: [
                    {
                        model: sequelize.model('BookingSession'),
                        where: {
                            [Op.or]: [
                                { studentId: userId },
                                { tutorId: userId },
                            ],
                        },
                    },
                    sequelize.model('BookingSession').scope('includeStudentAndTutor'),
                ],
            }),

returns 结果与此作用域没有使用 includeStudentAndTutor 作用域相同,只是简单地描述如下:

includeBookingSessionAndUsers: (userId) => ({
    include: [
        {
            model: sequelize.model('BookingSession'),
            where: {
                [Op.or]: [
                    { studentId: userId },
                    { tutorId: userId },
                ],
            },
            include: [
                {
                    model: sequelize.model('User'),
                    as: 'tutor',
                },
                {
                    model: sequelize.model('User'),
                    as: 'student',
                }
            ]
        },
    ],
})