2017-11-02 1 views
1

私はProductという種類の一連のカテゴリを持っています。そのうち3つしかないので、それぞれのテーブルを作成することができます。 SubProductASubProductBSubProductCと呼ぶことができます。それらは親のProductテーブルにそれらを格納することが混乱を招くほど十分に区別されます。GORMで1対1の関係を行うには?

当然のことながら、プライマリキーは、これらのそれぞれの製品にリンクする外部キーにすることができます。しかし、GORMはこのようなフィールドを事前にロードすることはできないようです。ここで私はこれらのいずれかの(一例として)持っているものです:私は

db.Where("product_id=?", p.ID).Preload("Product").First(&subProduct).Error 

のようなクエリを実行すると

type SubProductA struct { 
    ProductID uint64 `gorm:"primary_key;ForeignKey:ProductID"` 
    Product Product 
    CreatedAt   time.Time 
    UpdatedAt   time.Time 
    DeletedAt   *time.Time 
} 

しかし、結果は次のとおりです。

Can't preload field Product for models.SubProductA

私はプライマリキーを外部キーとしても正しく識別していないためです。しかし、私はさまざまなものを試してみて、私は同じエラーが発生します。

これを行う方法はありますか?通過する人々のために自分の質問に答えるために

答えて

0

...

GORMは、複数のレベルの1対1の関係に問題があるようです。単一のレベル、私が与えた例のために、それは何もより多くを必要とせずに働く。しかし、また、遠くの木まで同じキーと1対1であるフィールド上のプリロードを行うために、私は次の操作を行うために必要な:つまり

type SubSubProductA struct { 
    SubProductID uint64 `gorm:"primary_key"` 
    SubProductA SubProductA `gorm:"ForeignKey:SubProductID`" 
    CreatedAt   time.Time 
    UpdatedAt   time.Time 
    DeletedAt   *time.Time 
} 

を、ForeignKey部分は続きますオブジェクトそのもの。これは私のためのプリロードを修正しました。これが誰かを助けることを望みます。 GORMのドキュメントは、一般的なケース以外はまばらです。