web-dev-qa-db-ja.com

[構造体]フィールドにValuer / Scannerインタフェースを実装する必要がある場合、Structフィールドの無効なフィールドが見つかった

機能していません。

エラーを取得します。

struct DimiimanageFood/Models.RestaurantのField DeliveryZoneの無効なフィールドは、関係の外部キーを定義する必要があるか、Valuer/Scannerインタフェースを実装する必要があります。

type Restaurant struct {
ID uint
Name string `json:"name"`
EmployeeId uint `json:"employee_id"`
Phone string `json:"phone"`
Address string `json:"address"`
ImagesUrl *string `json:"images_url"`
Position string `json:"position"`
WorkDays string `json:"work_days"`
StartWorkTime string `json:"start_work_time"`
EndWorkTime string `json:"end_work_time"`
Blocked bool `json:"blocked"`
DeliveryZone []*DeliveryZone `json:",omitempty"`
}

type DeliveryZone struct {
ID uint `json:"id"`
RestaurantId uint `json:"restaurant_id"`
Zone string `json:"zone"`
Price float32 `sql:"-"`
}
 _
err := GetDB().Omit(clause.Associations).Model(Restaurant{}).Create(map[string]interface{} {
   "name": rest.Name,
   "EmployeeId": rest.EmployeeId,
   "Phone": rest.Phone,
   "Address": rest.Address,
   "ImagesUrl": rest.ImagesUrl,
   "WorkDays": rest.WorkDays,
   "StartWorkTime": rest.StartWorkTime,
   "EndWorkTime": rest.EndWorkTime,
   "Blocked": rest.Blocked,
   "Position": clause.Expr{
      SQL: "ST_GeomFromText(?)",
      Vars: []interface{}{fmt.Sprintf("POINT((%s))", rest.Position)},
   },
}).Error
 _
3
Man

試す

DeliveryZone []*DeliveryZone `gorm:"-"`
 _

https://gorm.io/docs/models.html - > ctrl + f - >このフィールドを無視する

1
Maxim

RestaurantIDをDeliveryZone StructのRestaurantIDに変更。

type Restaurant struct {
    ID uint
    Name string `json:"name"`
    EmployeeId uint `json:"employee_id"`
    Phone string `json:"phone"`
    Address string `json:"address"`
    ImagesUrl *string `json:"images_url"`
    Position string `json:"position"`
    WorkDays string `json:"work_days"`
    StartWorkTime string `json:"start_work_time"`
    EndWorkTime string `json:"end_work_time"`
    Blocked bool `json:"blocked"`
    DeliveryZone []*DeliveryZone `json:",omitempty"`
}

type DeliveryZone struct {
    ID uint `json:"id"`
    RestaurantID uint `json:"restaurant_id"`
    Zone string `json:"zone"`
    Price float32 `sql:"-"`
}
 _

あるいは、レストランの構造体でForeignKeyタグを追加して、外部キーを手動で定義できます。例えば.

DeliveryZone []*DeliveryZone json:",omitempty" gorm:"foreignKey:RestaurantId"
 _
3
KevinLiu