2

golang で最初のアプリを書いているので、初心者の質問で申し訳ありませんが、次の問題の解決策を見つけることができませんでした:

positionattachmentの 2 つのテーブルがあります。各位置には複数の添付ファイルを含めることができます。これが私のモデルです:

type Positions struct {
    Sys_id     int `gorm:"AUTO_INCREMENT" gorm:"column:sys_id" json:"sys_id,omitempty"`
    Name string `gorm:"size:120" gorm:"column:name" json:"name,omitempty"`
    OpenPositions int `gorm:"column:open_positions" json:"open_positions,omitempty"`
    ContactList string `gorm:"size:1000" gorm:"column:contact_list" json:"contact_list,omitempty"`
    Attachments []Attachment `gorm:"ForeignKey:RecordId"`
}

type Attachment struct {
    Sys_id     int `gorm:"AUTO_INCREMENT" gorm:"column:sys_id" json:"sys_id"`
    Name string `gorm:"size:255" gorm:"column: name" json:"name"`
    File string `gorm:"size:255" gorm:"column:file" json:"file"`
    RecordId int `gorm:"column:record_id" json:"record_id"`
    Table string `gorm:"size:255" gorm:"column:table" json:"table"`
    // ...
}

データベースにクエリを実行し、添付ファイルで位置を取得したい

positions2 := []models.Positions{}
err := db.Where("open_positions > ?", 0).Preload("Attachments", "`table` = ?", "user_position").Find(&positions2)
if err != nil {
    log.WithFields(log.Fields{
        "type": "queryerr",
        "msg": err,
    }).Error("faked up query")
}

このクエリの結果 - 位置は正しく取得できますが、添付ファイルは空です。

(can't preload field Attachments for models.Positions) level=error msg="faked up query" msg=&{0xc04200aca0 can't preload field Attachments for models.Positions 6 0xc042187e40 0xc042187d90 0xc0422cd4a0 0 {0xc042225130} false map[] map [] 間違い}

助けてくれてありがとう

4

2 に答える 2

-1

GoやGormについてではなく、SQLについてのようです。

W3SCHOOLS:

あるテーブルの FOREIGN KEY は、別のテーブルの PRIMARY KEY を指します。

ただしRecordId、モデルの主キーではありません。外部キーが主キーを参照するようにします。次の方法で修正する必要があります。

RecordId int `gorm:"column:record_id" gorm:"primary_key" json:"record_id"`
于 2016-12-08T16:20:01.180 に答える