Sequelize加入非主键

时间:2015-03-10 21:01:47

标签: mysql node.js sequelize.js

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

TableA.hasOne( models.TableB, { as: 'TableB', foreignKey: 'someID' } );

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

如何告诉sequelize加入someNonPrimaryKey?

3 个答案:

答案 0 :(得分:3)

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

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

TableA.hasOne(TableB, {
  sourceKey: 'someNonPrimaryKeyColumnOnTheSOurceModel',
  foreignKey: 'matchingColumnOnTheTargetModel'
});

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

您可以在此处了解更多信息:https://sequelize.org/master/manual/assocs.html

答案 1 :(得分:2)

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

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

TableB.belongsTo(models.TableA, { as: 'TableA', foreignKey: 'someID', targetKey: 'notTableAID' } );

答案 2 :(得分:0)

对我来说,它通过同时执行@ thanh1101681和@King James Enejo的两个答案而起作用,只放了sourcekey或targetkey都不起作用!

{"message"=>"Bad credentials", "documentation_url"=>"https://docs.github.com/rest"}