假設存在兩個模型,一個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關係類型中,如果不添加別稱,反而無法正常的將數據添加到數據庫。原因暫時無從得知,如果有朋友知道,歡迎指出!