首页 > 解决方案 > 如何在数据插入期间正确定义 Sequelize 关联

问题描述

我正在尝试 Sequelize 关联,但遇到了问题。

我有两个模型

class User extends Model { }
User.init(
    {
        id: {
            allowNull: false,
            primaryKey: true,
            type: DataTypes.STRING,
        },
        name: DataTypes.STRING,
    }, {/** */ });


class Book extends Model { }
Book.init(
    {
        id: {
            allowNull: false,
            primaryKey: true,
            type: DataTypes.STRING,
        },
        name: DataTypes.STRING,
    }, {/** */ });
Book.belongsTo(User, { as: 'owner' });

想象一下,我有这本书的用户,我如何将用户与这本书关联起来,以便我总是可以从这本书中得到所有者?

我在想

const user = await User.findByPK(....);
const newBook = Book.create({
        name:"BookName",
        owner:user.id //But this isn't working
    });

解决此问题的最佳方法是什么?谢谢

标签: sequelize.js

解决方案


用别名定义关联意味着Book拥有ownerId字段。

来自官方文档:

定义别名比简单地为外键指定自定义名称更强大。举个例子可以更好地理解这一点:

Ship.belongsTo(Captain, { as: 'leader' }); // This creates the `leaderId` foreign key in Ship.

请参见关联别名和外键

所以你应该Book这样创建:

const newBook = Book.create({
        name:"BookName",
        ownerId: user.id
    });

推荐阅读