mysql - Sequelize具有一对一关系的插入数据

标签 mysql sequelize.js

假设我有两个模型 UsersStatistics。 这些模型的一对一关系如下所示:

Users.hasOne(Statistics, {
    foreignKey: {
        name: 'userId',
        unique: true,
        allowNull: true,
    },
    onDelete: 'CASCADE'
});

但是,我不明白如何向子表中插入数据。我尝试这样做,但它不起作用(Statistics 表字段为空)也不会引发任何错误。

Users
.build({
    username: req.body.username,
    email: req.body.email,
    Statistics: {
        gamesWon: 10 // For example.
    }
},
{
    include: [ Statistics ]
})
.save()
.then(() => {
    res.render('./user/register', { success: true } );
})
.catch(sequelize.ValidationError, (err) => {
    res.send(err);
});

我做错了什么?如何正确地将数据插入 Statistics 表。

最佳答案

在使用hasOne方法建立关联时,它会向父类添加getter和setter以及createChild方法。

它将添加用户实例方法“getStatistics”、“setStatistics”和“createStatistics”

要将统计信息链接到用户,您需要调用该方法

user.createStatistics({
        gamesWon: 10 
    })

针对您的情况。

完整的例子应该是:

Users
.create({
    username: req.body.username,
    email: req.body.email,
})
.then(user => {
user.createStatistics({gamesWon: 10 })
})
.catch(sequelize.ValidationError, (err) => {
    res.send(err);
});

关于mysql - Sequelize具有一对一关系的插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49825372/

相关文章:

java - 比较具有多个属性的 bean,每个属性取决于两个 bean

java - IE 浏览器 Windows 8.1 的鼠标悬停问题

mysql - 我如何优化这个子查询和连接的 MySQL 查询?

typescript - 通过追加到 SQLite 上的现有数组来更新 Sequelize 列

javascript - 在 where 子句中进行 Sequelize 连接?

node.js - set/add方法不是sequelize Node js的函数

javascript - 我的代码中的 Jquery 删除行表错误

mysql - 图书馆数据库设计外键

sequelize.js - 按虚拟字段序列化查询

sequelize.js - N :M association error when using include. 通过