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、待續

 

 

綜上:

在1: 1關係類型中,有無別稱對添加結果無影響,但是在1:n關係類型中,如果不添加別稱,反而無法正常的將數據添加到數據庫。原因暫時無從得知,如果有朋友知道,歡迎指出! 

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章