【问题标题】:sequelizejs relations/associations, hasMany/belongsTo vs reference on definition modelsequelizejs 关系/关联,hasMany/belongsTo vs 定义模型上的参考
【发布时间】:2016-12-12 23:23:36
【问题描述】:

我对续集的关系有点困惑。

也是一样的做法:

var User = this.sequelize.define('user', {/* attributes */}), 
Company  = this.sequelize.define('company', {/* attributes */});

User.belongsTo(Company); 

这样做:

var User = this.sequelize.define('user', {
    company_id : {
        references: {
            model: 'Company'
            key: id
        }
    }
    /* more attributes */
}), 
Company  = this.sequelize.define('company', {/* attributes */});

有什么区别?显然,两个代码执行相同的表作为结果,其中在用户表中将 companyId 外键添加到 Company。

谢谢!

【问题讨论】:

    标签: javascript mysql node.js orm sequelize.js


    【解决方案1】:

    它们只是实现相同结果的不同方法。根据您在代码中遵循的模式或特定选项,一个可能最终会比另一个更清晰。请注意,在您的示例中,前者比后者紧凑得多,这可能使其成为更好的选择。

    但是,您的示例中有一个错误。第一个确实会产生companyId 的外键,但是在第二个示例中,您使用company_id。如果您想使用带下划线的表名和列名而不是驼峰式大小写,则需要在Sequelize.define() 中传入underscored: true 选项。

    【讨论】:

    • 感谢您的回复。我阅读了下划线和其他选项。当我使用第二种形式创建复合主键(使用 belongsToMany)时,pk/fk 键是我表的最后一个属性,如何放置属性的顺序?
    • 我认为目前不可能(因为这并不重要),但如果您想添加该功能,代码是开放的 :)
    • 再次感谢。使用引用选项将属性添加到我的模型中,并在引用的 hablé 中使用带有 belongsToMany 的类方法似乎解决了属性顺序问题.. 你能告诉我这是不是不好的做法吗?也许litros有点rebundant ..
    • 我不认为他们会这样做。我认为这是正确的答案:stackoverflow.com/questions/46305459/…
    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多