Golang Gorm - 在嵌套的STI关系上预加载时SQL不正确

时间:2016-09-15 18:35:16

标签: sql go go-gorm

在STI结构上预加载嵌套关系时,我得到了一些奇怪的SQL:

企业结构:

type Firm struct {
    gorm.Model
    FirmIdentifier   string
    Name             string
    Type             string
    ClearingMember   *Firm `gorm:"ForeignKey:ClearingMemberID"`
    ClearingMemberID int
    ExecutingFirm    *Firm `gorm:"ForeignKey:ExecutingFirmID"`
    ExecutingFirmID  int
    Address          Address `gorm:"polymorphic:Addressable;"`
    Contacts         []Contact
}

type Execution struct {
    ID                uint
    Price             int
    Side              string
    Symbol            string
    ExecutingFirm     Firm `gorm:"ForeignKey:FirmID"`
    FirmID            int

}

以下是实际数据:

-
  id:                 1
  name:               Clearing Member 1
  type:               ClearingMember
  clearing_member_id: 

-
  id:                 3
  name:               Executing Firm 1
  type:               ExecutingFirm
  clearing_member_id: 1
-
  # Execution
  id: 1
  side: SELL
  price: 1000
  symbol: FUT.EXC.201612
  firm_id: 3

此查询:

db.Preload("ExecutingFirm").Preload("ExecutingFirm.ClearingMember").Find(&executions)

生成以下SQL,查找clearing_member_id为3的公司,而不是ID为1的公司:

(/home/vagrant/go/src/message_builder_test.go:90) 
[2016-09-15 18:30:33]  [1.14ms]  SELECT * FROM `executions`  

(/home/vagrant/go/src/message_builder_test.go:90)  
[2016-09-15 18:30:33]  [1.51ms]  SELECT * FROM `firms`  WHERE `firms`.deleted_at IS NULL AND ((`id` IN ('3','4')))

(/home/vagrant/go/src/message_builder_test.go:90)  
[2016-09-15 18:30:33]  [1.24ms]  SELECT * FROM `firms`  WHERE `firms`.deleted_at IS NULL AND ((`clearing_member_id` IN ('3','4')))

0 个答案:

没有答案