繁体   English   中英

如何在续集的 model 中声明外键

[英]how to declare a foreign key in a model in sequelize

我有一个名为 video.js 的 model。

module.exports= function(sequelize, DataTypes){

return sequelize.define(
    "video",
    {
        id:{
            type:DataTypes.INTEGER(11).UNSIGNED,
            allowNull:false,
            autoIncrement:true,
            primaryKey:true,
            field:"id"
        },
        title:{
            type:DataTypes.STRING(20),
            unique:true,
            field:"title"

        },
        createdAt: {
            type: DataTypes.DATE,
            allowNull: true,
            field: "createdAt"
        },
        updatedAt: {
            type: DataTypes.DATE,
            allowNull: true,
            field: "updatedAt"
        }
    },
    {
        tableName:"video"
    }    
);
};

我在 mysql 中创建了一个与此 model 等效的表,并且我添加了一个外键,该外键正在另一个名为 user 的表中使用。

这是用户表的 model。

module.exports = function(sequelize, DataTypes) {
return sequelize.define(
    "user",
    {
        id: {
            type: DataTypes.INTEGER(11).UNSIGNED,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true,
            field: "id"
        },
        firstName: {
            type: DataTypes.STRING(255),
            allowNull: false,
            defaultValue: "",
            field: "firstName"
        },
        lastName: {
            type: DataTypes.STRING(255),
            allowNull: false,
            defaultValue: "",
            field: "lastName"
        },
},
    {
        tableName: "user"
    }
);

};

我使用 user 表中的 id 列作为 video 表中的外键,具有一对多关系,其中一个用户拥有一个或多个视频。 我面临的问题是我不知道如何用外键定义 model。

CREATE TABLE `video` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `title` varchar(255) NOT NULL DEFAULT '',
   `createdAt` datetime DEFAULT NULL,
   `updatedAt` datetime DEFAULT NULL,
   PRIMARY KEY(`id`),
   FOREIGN KEY (userId_FK) REFERENCES user(id)); 

如何在续集中创建与此视频表等效的 model?

sequelize 中的关联在这里得到了很好的解释: https://sequelize.org/master/manual/assocs.html

我想你的用户可以有很多视频?

 'use strict'; module.exports = (sequelize, DataTypes) => { const User = sequelize.define('User', { id: { type: DataTypes.INTEGER(11).UNSIGNED, allowNull: false, primaryKey: true, autoIncrement: true, field: "id" }, firstName: { type: DataTypes.STRING(255), allowNull: false, defaultValue: "", field: "firstName" }, lastName: { type: DataTypes.STRING(255), allowNull: false, defaultValue: "", field: "lastName" }, }, {}); User.associate = function(models) { User.hasMany(models.Video, { foreignKey: 'userId' }); }; return User; };

您的视频 Model 将定义如下:

 'use strict'; module.exports = (sequelize, DataTypes) => { const Video = sequelize.define('Video', { id:{ type:DataTypes.INTEGER(11).UNSIGNED, allowNull:false, autoIncrement:true, primaryKey:true, field:"id" }, title:{ type:DataTypes.STRING(20), unique:true, field:"title" }, createdAt: { type: DataTypes.DATE, allowNull: true, field: "createdAt" }, updatedAt: { type: DataTypes.DATE, allowNull: true, field: "updatedAt" } }, {}); Video.associate = function(models) { Video.belongsTo(models.User, { foreignKey: 'userId', onDelete: 'CASCADE' }); }; return Video; };

希望这对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM