2014-10-29 118 views
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_idUserId == author_id

正如你可以看到我有套管的版本駱駝和我指定的人。我錯過了什麼?

**編輯**

沒有在數據庫中的駱駝領域沒有任何限制:UserIdArticleId但Sequelize創建的表中的字段。

回答

0

您需要添加的關係兩側的外鍵,e.g:

User.hasMany(models.Article, {constraints: false, foreignKey: 'author_id'});