sequelizejs 关系/关联,hasMany/belongsTo vs 定义模型上的参考

Posted

技术标签:

【中文标题】sequelizejs 关系/关联,hasMany/belongsTo vs 定义模型上的参考【英文标题】:sequelizejs relations/associations, hasMany/belongsTo vs reference on definition model 【发布时间】: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。

谢谢!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

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

以上是关于sequelizejs 关系/关联,hasMany/belongsTo vs 定义模型上的参考的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP - 在模型中查找没有 hasMany 关系的 hasMany 关联?

CakePHP 模型关联 HasMany - 保存错误

使用ORM关联关系,如何自己关联自己

加载 hasMany 关系的最后一条记录

用到了yii2 hasMany() 方法,一对多关联

Yii2 hasMany关系中如何在ON条件下使用常量