transactions - 如何在交易期间禁用特定的验证规则?

标签 transactions sequelize.js

我有两个模型:文件和类(class)。 Files 属于 Course 并且有一个 CourseId 字段。

在某些时候,我需要在插入它们之前使用事务来验证它们,但是,我的文件模型验证规则之一验证通知的 CourseId 是否存在(它在我不使用事务的其他情况下很有用) 并且此规则在交易期间被标记,因为交易期间没有 CouseId,正如我们所预料的那样。

models.sequelize.transaction(function (t) {
    // if we want to insert a new course
    if (formData.courseId == 0) {
        return models.course.create({
            name: formData.courseName,
            fieldOfStudy: formData.fieldOfStudyId
        }, {transaction: t}).then(function(course) {
            return models.file.create({
                name: formData.name,
                universityId: formData.universityId,
                status: 1,
                type: formData.typeId,
                createdBy: userId,
                file_raw: files,
                courseId: course.id // here is the problem!
            }, {transaction: t});
        });
    // if we want to use a existing one                
    } else { 
        return models.file.create({
            name: formData.name,
            universityId: formData.universityId,
            courseId: formData.courseId,
            status: 1,
            type: formData.typeId,
            createdBy: userId,
            file_raw: files
        }, {transaction: t});
    }
})

如果我可以动态禁用 CourseId 字段的验证规则,则可以解决此问题,但显然这还不可能。另一种方法是虚拟字段,但这种方法并不十分“优雅”。

有什么想法吗?

最佳答案

显然,“.create() 方法”没有记录,但有一个简单的解决方案:skip

正如我们所见here ,方法 .validate 有一个“跳过”选项。为了解决这个问题,我们只需要将 skip 设置为 ["courseId"]:

return models.file.create({
    name: formData.name,
    universityId: formData.universityId,
    status: 1,
    type: formData.typeId,
    createdBy: userId,
    file_raw: files,
    courseId: course.id
}, {skip: ['courseId'], transaction: t});

关于transactions - 如何在交易期间禁用特定的验证规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37538014/

相关文章:

c# - 托管和非托管代码在一个事务中更新数据库?

java - 跟踪 SQL 中的新主键

transactions - JTA 是否可以跨多个线程工作?

sequelize.js - 我们可以在没有数据库连接的情况下对 sequelize 模型进行单元测试吗?

node.js - 如何查看 Sequelize.js 生成的 SQL?

javascript - 为什么 Sequelize 只使用 findAll() 返回一个对象?

hibernate - 如何在 hibernate 状态下检查 session 是否已经打开事务?

PHP/MySQL - 如何防止两个请求 *更新

sequelize.js - 使用列值作为子字符串对 LIKE/iLIKE 进行序列化

nested - Sequelize : Ordering by Nested Associations