2017-07-05 35 views
0

gormを使用してデータベースをマッピングしています。GORMから多対多の結果を取得する

多対多の関係を持つ2つのテーブル(serviceresource)があります。私は、次のようなコードでそれらをモデル化しています:

type Service struct { 
    BaseModel 
    Name  string  `gorm:"not null;unique_index"` 
    Resources []Resource `gorm:"many2many:service_resource"` 
} 

type Resource struct { 
    BaseModel 
    Name string `gorm:"not null;unique_index"` 
} 

GORMのAutoMigrate次の表が作成されている使用:

Database diagram m2m

は(私ものidの主キーを追加するために、生のSQLクエリを実行します。

service := Service{ 
    Name: "core", 
    Resources: []Resource{ 
     {Name: "ec2"}, 
     {Name: "dynamo"}, 
    }, 
} 
db.Create(&service) 
:マッピングテーブル)

は、新しいサービスを作成するために、私は次のコードを使用します

これは、サービスと一緒にすべてのリソースを作成し、それらの間の関係を期待通りにservice_resourceテーブルに入力します。

しかし、私の問題は、私がサービスを照会しているときです。私はすべてのサービスを取得するには、次のコードを使用します。

services := []model.Service{} 
db.Find(&services) 

これは、サービスの配列は、人口で正常に返しますが、各サービスのResources配列が空である:

"services": [ 
    { 
     "ID": 1, 
     "Name": "core", 
     "Resources": null 
    }, 
    ... 
] 

私はGORMという仮定の下にありましたそれを自動的に入力します。私は行方不明のいくつかのステップがありますか?

答えて

0

あなたはサービスを照会する前に、リソースのフィールドをPreloadする必要があります。

services := []model.Service{} 
db.Preload("Resources").Find(&services) // error checking ommited 

これは正しく、すべてのサービスのResourcesフィールドに移入されます。

関連する問題