Sequelize - 在验证模型的关联时获取正确的路径

Posted

技术标签:

【中文标题】Sequelize - 在验证模型的关联时获取正确的路径【英文标题】:Sequelize - get proper path while validating associations of a model 【发布时间】:2018-06-11 12:37:00 【问题描述】:

我将 Sequelize 用作我的项目的 ORM。我有这个结构:

const Event = sequelize.define('event', 
    // fields defined
);

const Question = sequelize.define('question', 
    description: 
        type: Sequelize.STRING,
        allowNull: false,
        defaultValue: '',
        validate: 
            notEmpty:  msg: 'Description should be set.' 
       ,
    ,
    // other fields defined
);

Event.hasMany(Question);
Question.belongsTo(Event);

然后我创建一个 Event 模型的实例,并带有关联,如下所示:

const body = 
    questions: [
         description: ''  // is obviously invalid
    ],
    // some other fields


const newEvent = await Event.create(body, 
    include: [ Question ]
);

如果我对 Event 实例本身有验证错误,它会返回 SequelizeValidationError,在这里我可以看到每个 ValidationErrorItempath 属性。但是,当我在子模型上出现验证错误时,此验证错误的 path 属性不清楚:


    "message": "Description should be set.",
    "type": "Validation error",
    "path": "description",
    "value": "",
    "origin": "FUNCTION",
    "instance": 
        "required": true,
        "id": null,
        "description": "",
        "event_id": 60,
        "updated_at": "2018-06-11T12:25:04.666Z",
        "created_at": "2018-06-11T12:25:04.666Z"
    ,
    "validatorKey": "notEmpty",
    "validatorName": "notEmpty",
    "validatorArgs": [
        
            "msg": "Description should be set."
        
    ],
    "__raw": 
        "validatorName": "notEmpty",
        "validatorArgs": [
            
                "msg": "Description should be set."
            
        ]
    

问题是,目前还不清楚是什么导致了这个错误以及哪个孩子无效。当我使用 Mongoose 作为 ORM 时,如果我也这样做,path 属性将等于 questions.0.description 之类的属性,这样就更清楚了,这样您就可以看到哪个孩子无效。

所以,我的问题是:有没有办法在验证子模型时设置path 属性?

【问题讨论】:

【参考方案1】:

显然它还没有出现,我已经在 Sequelize repo 上提交了一个问题,这里是:https://github.com/sequelize/sequelize/issues/9524

【讨论】:

以上是关于Sequelize - 在验证模型的关联时获取正确的路径的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize models - 在 Node 中同步时设置关联

Sequelize js如何获取关联模型的平均值(聚合)

仅从 sequelize junction 模型返回指定的关联模型

按关联模型排序时,Sequelize 抛出错误“无法找到模型 x 的有效关联”

在 sequelize.js 中获取与 belongsToMany 的关联

查询联结表而不在 Sequelize 中获取两个关联