Go GORM не удалось угадать отношения для вложенных типов - PullRequest
0 голосов
/ 03 августа 2020

В некоторых случаях мне нужно расширить мои стандартные модели расчетными данными. Например, отобразить информацию о существовании некоторых значений БД в пользовательском интерфейсе. Я делаю это, создавая расширенную модель с помощью встраивания типов, например:


/* Standard Models */

type User struct {
    gorm.Model
    Name      string
    Documents []*Document // has-many
}

type Document struct {
    gorm.Model
    User             *User // belongs-to
    UserID           uint
    Name             string
    DocumentFulltext *DocumentFulltext // has-one
}

type DocumentFulltext struct {
    gorm.Model
    Document   *Document // belongs-to
    DocumentID uint 
    Fulltext   string
}

/* Extensions */

type DocumentListEntry struct {
    Document       `gorm:"embedded"`
    FulltextExists bool
}

Мой запрос выглядит так:

queryConnection := DBConnection
queryConnection = queryConnection.Joins("left join document_fulltexts on documents.id = document_fulltexts.document_id")
queryConnection = queryConnection.Where(`"documents"."user_id" = ?`, userID)
queryConnection = queryConnection.Select(
    `"documents"."user_id",
    "documents"."name",
    CASE WHEN "document_fulltexts"."fulltext" IS NOT NULL THEN TRUE ELSE FALSE END AS "fulltext_exists"`,
)
documents := []DocumentListEntry{}
queryConnection.Table("documents").Scan(&documents)

Это ошибка, которую я получаю:

[error] failed to guess DocumentFulltext's relations with DocumentListEntry's field DocumentFulltext 1 g false

Полную демонстрацию можно найти здесь: https://github.com/go-gorm/playground/pull/62

Как мне нужно построить расширенную модель, чтобы это работало?

Это подход рекомендуется вообще? Какая здесь лучшая практика? Какие альтернативы мне следует рассмотреть?

Thx!

1 Ответ

0 голосов
/ 05 августа 2020

Это была ошибка в GORM. Исправлено в версии v0.2.27.

Проблема GORM здесь: https://github.com/go-gorm/gorm/issues/3224

...