Sequelize加入非主键

KJ3*_*KJ3 10 mysql node.js sequelize.js

我有两个表需要关联.TableA有一个TableB.我可以在TableA模型中执行此操作:

TableA.hasOne( models.TableB, { as: 'TableB', foreignKey: 'someID' } );
Run Code Online (Sandbox Code Playgroud)

查看SQL,这将尝试连接TableA.ID和TableB.someID.我真正想要的是加入TableA.someNonPrimaryKey和TableB.someID.

如何告诉sequelize加入someNonPrimaryKey?

Kin*_*ejo 5

我知道这是旧的;我是为了其他可能需要答案的人而做出回应。

您现在可以在非主键列上关联表。在您的情况下,关联将是:

TableA.hasOne(TableB, {
  sourceKey: 'someNonPrimaryKeyColumnOnTheSOurceModel',
  foreignKey: 'matchingColumnOnTheTargetModel'
});
Run Code Online (Sandbox Code Playgroud)

请注意,该列someNonPrimaryKeyColumnOnTheSOurceModel必须在模型定义中unique设置为true

您可以在此处阅读更多相关信息:https : //sequelize.org/master/manual/assocs.html


小智 3

目前在续集中这是不可能的,但是您可以尝试这种方式。

HasOne 和 BelongsTo 之间的区别是,HasOne 在目标模型中插入关联键,而 BelongsTo 在源模型中插入关联键。关联而不是 hasOne 等于 BelongsTo

TableB.belongsTo(models.TableA, { as: 'TableA', foreignKey: 'someID', targetKey: 'notTableAID' } );
Run Code Online (Sandbox Code Playgroud)