sequelize模型在四类关联类型作用下如何添加数据【未完】

假设存在两个模型,一个stu(学生)模型,一个score(分数)模型。那么如何添加在添加新学生的基础上同时添加该新学生的score。

1、将stu和score设置为score:stu =  1:1

方案1:有别称
models.Score.belongsTo(models.Stu, {
    as: 'user', 
    foreignKey: 'userId',
    targetKey: 'id'
});
models.Score.create({
    user: {
        name: '添加用户',
        age: 50,
        sex: '女',
    },
    projectName: '历史',
    projectScore: '150'
}, {
    raw: true,
    include: [{
        model: models.Stu,
        as: 'user'
    }]
}).then((res) =>{
    console.log(JSON.stringify(res, null, 2))
}).catch((err) => {
    console.log(err)
});


方案2:无别称
models.Score.belongsTo(models.Stu, {
    foreignKey: 'userId',
    targetKey: 'id'
});
models.Score.create({
    stu: {
        name: '添加用户',
        age: 50,
        sex: '女',
    },
    projectName: '历史',
    projectScore: '150'
}, {
    raw: true,
    include: [{
        model: models.Stu
    }]
}).then((res) =>{
    console.log(JSON.stringify(res, null, 2))
}).catch((err) => {
    console.log(err)
});

在1:1的关系类型中,有无别称都可以进行正常的添加操作 

 2、将stu和score设置为stu:score=  1:n

      2.1、无别称情况下

models.Stu.hasMany(models.Score, {
    foreignKey: 'userId', // 对于一对多关系,外键在于多的那一方
    targetKey: 'id'
})

models.Stu.create({
    name: '添加用户',
    age: 50,
    sex: '女',
    score: {
        projectName: '历史',
        projectScore: '150'
    }
}, {
    raw: true,
    include: [{
        model: models.Score
    }]
}).then((res) =>{
    console.log(JSON.stringify(res, null, 2))
}).catch((err) => {
    console.log(err)
});

   在没有对score设置别称的时候,正常默认应该是表名score,但是执行的时候发现控制台打印的sql语句如下:仅添加了stu的信息,而score并不会像1:1那样子也添加上去。

 

   2.2 、有别称的情况下

models.Stu.hasMany(models.Score, {
    foreignKey: 'userId', // 对于一对多关系,外键在于多的那一方
    targetKey: 'id',
    as: 'score'
})

models.Stu.create({
    name: '添加用户',
    age: 50,
    sex: '女',
    score: {
        projectName: '历史',
        projectScore: '150'
    }
}, {
    raw: true,
    include: [{
        model: models.Score,
        as: 'score'
    }]
}).then((res) =>{
    console.log(JSON.stringify(res, null, 2))
}).catch((err) => {
    console.log(err)
});

  在有别称的情况下,执行上述的代码,可以看到控制台打印的消息为既添加了stu信息,有添加了score信息

 

3、待续

扫描二维码关注公众号,回复: 15862031 查看本文章

综上:

在1: 1关系类型中,有无别称对添加结果无影响,但是在1:n关系类型中,如果不添加别称,反而无法正常的将数据添加到数据库。原因暂时无从得知,如果有朋友知道,欢迎指出! 

   

猜你喜欢

转载自blog.csdn.net/QiZi_Zpl/article/details/104967858
今日推荐