0
我試圖建立一個簡單的博客應用程序中的外鍵,我有以下架構定義:爲什麼我有兩次使用Sequelize
這裏是User
:
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define("User", {
id: {type: DataTypes.BIGINT, autoincrement:true, primaryKey: true},
firstName: {type: DataTypes.STRING},
lastName: {type: DataTypes.STRING},
nickName: {type: DataTypes.STRING},
email: {type: DataTypes.STRING, unique: true, comment: "Unique "},
password: {type: DataTypes.STRING},
salt: {type: DataTypes.STRING},
enabled: {type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true}
}, {
freezeTableName: true,
classMethods: {
associate: function (models) {
User.hasMany(models.Article, {as: "Articles", constraints: false});
User.hasMany(models.Comment, {as: "Comments", constraints: false});
}
}
});
return User;
};
這裏是Article
:
module.exports = function(sequelize, DataTypes) {
var Article = sequelize.define("Article", {
id: {type: DataTypes.BIGINT, autoincrement:true, primaryKey: true},
slug: {type: DataTypes.STRING, comment: "Unique URL slug to access the article"},
title: {type: DataTypes.STRING},
content: {type: DataTypes.TEXT},
created: {type: DataTypes.DATE, defaultValue: DataTypes.NOW},
published: {type: DataTypes.BOOLEAN, allowNull: false, defaultValue: true}
}, {
freezeTableName: true,
classMethods: {
associate: function (models) {
Article.belongsTo(models.User, {as: "Author", foreignKey: "author_id"});
Article.hasMany(models.Comment, {as: "Comments", constraints: false});
}
}
});
return Article;
};
和Comment
:
module.exports = function(sequelize, DataTypes) {
var Comment = sequelize.define("Comment", {
id: {type: DataTypes.BIGINT, autoincrement:true, primaryKey: true},
content: {type: DataTypes.TEXT},
status: {type: DataTypes.INTEGER, defaultValue: 1},
author: {type: DataTypes.BIGINT},
article: {type: DataTypes.BIGINT}
}, {
freezeTableName: true,
classMethods: {
associate: function (models) {
Comment.hasOne(Comment, {as : "Parent", foreignKey: "parent_id"});
Comment.belongsTo(models.User, {as: "Author", foreignKey: "author_id"});
Comment.belongsTo(models.Article, {as: "Article", foreignKey: "article_id"});
}
}
});
return Comment;
};
個
的表創建正確,但我最終每次2個外鍵,比如這是在MySQL中第表:
'id','bigint(20)','NO','PRI','0',''
'slug','varchar(255)','YES','',NULL,''
'title','varchar(255)','YES','',NULL,''
'content','text','YES','',NULL,''
'created','datetime','YES','',NULL,''
'published','tinyint(1)','NO','','1',''
'createdAt','datetime','NO','',NULL,''
'updatedAt','datetime','NO','',NULL,''
'author_id','bigint(20)','YES','MUL',NULL,''
'UserId','bigint(20)','YES','',NULL,''
UserId
== author_id
用戶表:
'id','bigint(20)','NO','PRI','0',''
'firstName','varchar(255)','YES','',NULL,''
'lastName','varchar(255)','YES','',NULL,''
'nickName','varchar(255)','YES','',NULL,''
'email','varchar(255)','YES','UNI',NULL,''
'password','varchar(255)','YES','',NULL,''
'salt','varchar(255)','YES','',NULL,''
'enabled','tinyint(1)','NO','','1',''
'createdAt','datetime','NO','',NULL,''
'updatedAt','datetime','NO','',NULL,''
此表是正確的(無外鍵)
點評:
'id','bigint(20)','NO','PRI','0',''
'content','text','YES','',NULL,''
'status','int(11)','YES','','1',''
'author','bigint(20)','YES','',NULL,''
'article','bigint(20)','YES','',NULL,''
'createdAt','datetime','NO','',NULL,''
'updatedAt','datetime','NO','',NULL,''
'ArticleId','bigint(20)','YES','',NULL,''
'parent_id','bigint(20)','YES','MUL',NULL,''
'author_id','bigint(20)','YES','MUL',NULL,''
'article_id','bigint(20)','YES','MUL',NULL,''
'UserId','bigint(20)','YES','',NULL,''
ArticleId
== article_id
和UserId
== author_id
正如你可以看到我有套管的版本駱駝和我指定的人。我錯過了什麼?
**編輯**
沒有在數據庫中的駱駝領域沒有任何限制:UserId
和ArticleId
但Sequelize創建的表中的字段。