【问题标题】:sequelize one-to-one and one-to-many association between same tablessequelize 相同表之间的一对一和一对多关联
【发布时间】:2021-11-10 17:58:45
【问题描述】:

假设我有一个CashRegister 模型和Transaction 模型。 很明显,CashRegiser.hasMany(Transaction)。 但是,如果我需要保存最后一个 transactionId 以便快速访问 CashRegister 表怎么办?现在我需要同时实现CashRegiser.hasMany(Transaction)CashRegiser.hasOne(Transaction) // as lastTransactionId。 我该如何做到这一点?

【问题讨论】:

    标签: sequelize.js one-to-many one-to-one


    【解决方案1】:

    如果您需要指示外键并区分关联,请使用asforeignKey选项,如下所示:

    CashRegiser.hasMany(Transaction, { as: 'transactions' })
    CashRegiser.hasOne(Transaction, { foreignKey: 'lastTransactionId', as: 'lastTransaction' })
    

    【讨论】:

    • 试过这样的事情:javascript CashRegiser.hasOne(Transaction, { sourceKey: 'lastTransactionId', targetKey: 'id', as: 'lastTransaction' }); CashRegiser.hasMany(Transaction, { sourceKey: 'id', targetKey: 'cash_register_id', as: 'transactions' }); 但后来我在日志中看到 ``` LEFT OUTER JOIN "transactions" AS "lastTransaction" ON "cash_registers"."last_transaction_id" = "lastTransaction"."last_transaction_id " ``` 不知道为什么它为连接选择了错误的字段("lastTransaction"."last_transaction_id" 应该是 "lastTransaction"."id")
    • hasOne 没有targetKey 选项,只有sourceKey(在你的情况下应该等于id)和foreignKey(在你的情况下应该等于transactionId )。 hasMany 也是如此:sourceKey: 'id', foreignKey: 'cash_register_id'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2017-06-10
    • 2018-06-14
    • 2020-09-09
    • 2022-01-05
    • 2018-10-04
    相关资源
    最近更新 更多